我有字典和清单。 我想要具有相同值的键,程序在列表中添加与字典中的键具有相同位置的int。
所以我希望代码如下:Date;AMOUNT;OP;DESCRIPTION;CODE
12/10/2018;$123,45;id01;payment for hotel in Las Vegas room room service dinner golf club ;005214875462
12/11/2018;$400,00;id04;cash from ATM located in L.A.;0528158852687
12/12/2018;$1000,00;id99;ACME tornado pill ;854674852658
所以我想要这个输出:addition = [30+5, 40+0, 10]
addition = [35,40,10]
我真的不知道该怎么做。我认为可能带有for循环。
PS:我知道将列表称为列表很不好,但这是为了理解。
谢谢
答案 0 :(得分:2)
假设您要通过字母的索引将列表和字典链接,则可以执行以下操作:
from itertools import groupby
from string import ascii_lowercase
from operator import itemgetter
dic = {"a": 0, "b":1, "c": 1, "d": 0, "e": 2}
lst = [30, 40, 0, 5, 10]
res = [list(g) for k, g in groupby(sorted(dic.items(), key=itemgetter(1)), itemgetter(1))]
addition = [sum(lst[ascii_lowercase.index(x)] for x, _ in sublist) for sublist in res]
结果
print(addition) # -> [35, 40, 10]
在评论中,您说您不想对字典进行排序。好吧,因为您还是不能这样做。但是您必须对dict.items()
进行排序才能对其进行分组。如果这是一个问题,则您必须重新考虑自己的需求,因为我看不到其他方法。
答案 1 :(得分:2)
尝试此选项,适用于Python 3.6 +:
addition = []
dic = {"apple": 0, "coke":1, "zebra": 1, "France": 0, "e": 2}
mlist = [30,40,0,5,10]
dic_map={}
for i, (k,v) in enumerate(dic.items()):
dic_map.setdefault(v, set()).add(i)
for k, v in dic_map.items():
addition.append(sum([x for i, x in enumerate(mlist) if i in v ]))
print(addition)
#=> [35, 40, 10]
要了解为什么它仅适用于Python 3.6+(可靠?),请参阅:https://stackoverflow.com/a/49752234/5239030