Вывести словарь на основе входных данных из другого словаря и двух списков - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть словарь и два списка, и я хотел бы вывести другой словарь, который содержит отдельный список в качестве заголовка и сумму содержимого списка в качестве значений, однако я понятия не имею, как я могу это сделать.

results = {'Apple':'14.0', 'Banana':'12.0', 'Orange':'2.0', 'Pineapple':'9.0'}

ListA = ['Apple','Pineapple']
ListB = ['Banana','Orange']

Вывод:

dicttotal = {'ListA':'23.0', 'ListB':'14.0'}

Редактировать: я решил использовать панд для работы с вышеуказанными данными, поскольку обнаружил, что простота панд больше подходит для моего уровня понимания.Спасибо всем за помощь!

Ответы [ 4 ]

0 голосов
/ 27 сентября 2018

Однострочник, использующий (некрасивую) функцию eval(), но, как сказал Эдуард, лучше не использовать имена переменных в качестве ключей:

{list_name: str(sum([float(results[item]) for item in eval(list_name)])) for list_name in ['ListA', 'ListB']}
0 голосов
/ 27 сентября 2018

Вы можете использовать следующий код для получения суммы ListA.Точно так же и для ListB.Просто попробуйте сами

dicttotal = {}
ListASum = 0.0
ListBSum = 0.0
for item in ListA:
    if item in results:
        ListASum += float(results[item])
dicttotal['ListA'] = ListASum
0 голосов
/ 27 сентября 2018

Сокращение и понимание словаря для создания словаря с начальным значением с последующим обновлением одного значения.Если бы имена ключей не были именами переменных, возможно, они могли бы помочь в их понимании.

from functools import reduce
d_total = {'ListA': str(reduce(lambda x, y: float(results[x]) + float(results[y]), lista))}
d_total['ListB'] = str(reduce(lambda x, y: float(results[x]) + float(results[y]), listb))
{'ListA': '23.0', 'ListB': '14.0'}

Примечание: PEP-8 snake_case для именования

0 голосов
/ 27 сентября 2018

в python вы можете использовать списки, чтобы сделать это легко читаемым:

items_for_a = [float(v) for i, v in results.items() if i in ListA]
total_a = sum(items_for_a)

dicttotal, который вы хотите напечатать, хотя и странно.Я не думаю, что вы хотите печатать имена переменных как ключи словаря.

в python2 вы должны использовать .iteritems() вместо .items()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...