在Python中遍历列表和字典

时间:2018-12-12 08:42:06

标签: python list loops dictionary

我有字典和清单。 我想要具有相同值的键,程序在列表中添加与字典中的键具有相同位置的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:我知道将列表称为列表很不好,但这是为了理解。

谢谢

2 个答案:

答案 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