Попытка загрузки списка списков из списка словарей

[Д2] 1. ОПРЕДЕЛЕНИЕ ПРОБЛЕМЫ РАСПРЕДЕЛЕНИЯ

Если D - производный класс базового класса B, то вы можете назначить объект типа Derived переменной (или параметру) типа Base.

ПРИМЕР

class Pet
{
 public:
    string name;
};
class Dog : public Pet
{
public:
    string breed;
};

int main()
{   
    Dog dog;
    Pet pet;

    dog.name = "Tommy";
    dog.breed = "Kangal Dog";
    pet = dog;
    cout << pet.breed; //ERROR

Хотя указанное назначение разрешено, значение, присвоенное переменной pet, теряет поле породы. Это называется проблемой нарезки.

2. КАК ИЗМЕНИТЬ ПРОБЛЕМУ СЦЕПЛЕНИЯ

Чтобы устранить проблему, мы используем указатели на динамические переменные.

ПРИМЕР

Pet *ptrP;
Dog *ptrD;
ptrD = new Dog;         
ptrD->name = "Tommy";
ptrD->breed = "Kangal Dog";
ptrP = ptrD;
cout << ((Dog *)ptrP)->breed; 

В этом случае ни один из элементов данных или функций-членов динамической переменной, на которые указывает ptrD (объект класса потомка), будет потерян. Кроме того, если вам нужно использовать функции, функция должна быть виртуальной.

0
задан Ayxan 24 March 2019 в 16:34
поделиться

2 ответа

Вы можете получить значения словаря с помощью функции values . Теперь вам нужно перебрать свои словари и вызвать для них значения:

[d.values() for d in scan_list]
0
ответ дан Querenker 24 March 2019 в 16:34
поделиться

Вы можете использовать этот код:

for item in scanList:
    list = []
    for key, value in item.iteritems():
        list.append(value)
    joinlist.append(list)
0
ответ дан Ali Hallaji 24 March 2019 в 16:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: