【问题标题】:Values in Dictionaries during a loop循环期间字典中的值
【发布时间】:2013-03-15 19:14:13
【问题描述】:

在字典中循环时,如何更改循环中的值。 例如:

listt=[1,4,2]
mydict=[a:d, c:b, q:r]

我正在努力:

for i in listt:
     for key in mydict:
           mydict[key]=i

但这不起作用。发生的是第 i 个值最终成为最后一个值。在我的新字典中,所以它始终是 a:2、c:2 等。而不是 a:1, b:4, q:2。我需要存储我认为的第 i 个值,然后使用它来更改字典中的值。虽然我不确定我在做什么!任何帮助,将不胜感激!

【问题讨论】:

    标签: python list loops dictionary


    【解决方案1】:

    dicts 中的键没有排序。所以你无法控制listt 中的项目和字典mydict 中的键之间的配对。

    但是,OrderedDict 中的键是有序的:

    import collections
    
    listt=[1,4,2]
    mydict=collections.OrderedDict([('a','d'), ('c','b'), ('q','r')])
    for item, key in zip(listt, mydict):
        mydict[key] = item
    
    print(mydict)    
    

    产量

    OrderedDict([('a', 1), ('c', 4), ('q', 2)])
    

    【讨论】:

      【解决方案2】:

      这里对dict的误解很少:

      您似乎想用相同的键和新值(使用新列表提供的值)“更新”字典。问题是,字典不能按顺序保存存储的项目;字典{a:d, c:b, q:r} 并不意味着您可以按[a, c, q] 的顺序遍历字典。

      另外,您正在使用嵌套的 for 循环,这就是为什么每个值都作为 listt 的最后一个 vlues 结束的原因。

      您可以使用 collections.OrderedDict 来保持秩序。并且,使用 zip 来组合迭代器,而不是嵌套的 for 循环。

      所以,你的代码是:

      from collections import OrderedDict
      
      listt = [1, 4, 2]
      mydict = OrderedDict([(a, d), (c, b), (q, r)])
      
      mydict = OrderedDict(zip(mydict.keys(), listt))
      

      【讨论】:

        猜你喜欢
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        • 2020-11-02
        • 2021-12-17
        • 2022-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多