首页 文章

循环遍历 python 中的列表和字典[1]

提问于
浏览
-2

我有一本字典和一份清单。我想要具有相同值的键,程序在列表中添加与字典中的键具有相同位置的 int。

所以我希望代码生成:addition = [30+5, 40+0, 10]所以我想要这个输出:addition = [35,40,10]

addition = []  
dic = {"a": 0, "b":1, "c": 1, "d": 0, "e": 2}
list = [30,40,0,5,10]

我真的不知道如何做到这一点。我想也许是 for 循环。

PS:我知道将列表称为列表是不好的,但这是为了理解。

谢谢

2 回答

  • 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

  • 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()进行排序才能对它们进行分组。如果这是一个问题,你必须重新考虑你的需求,因为我没有看到另一种方式..

相关问题