【问题标题】:Iterating dictionary in the order I added items, python按我添加项目的顺序迭代字典,python
【发布时间】:2012-08-27 08:22:55
【问题描述】:

假设我像这样创建了一个字典:

self.defaultValues = {}
self.defaultValues["A"] = "10"
self.defaultValues["B"] = "100"
self.defaultValues["C"] = "20"
self.defaultValues["D"] = "12.5"

我希望能够以添加它们的相同顺序迭代项目,这意味着

for k in self.defaultValues:
     print k

会导致

A
B
C
D

另外,如果我有另一个列表,不一定是相同的长度。我想迭代字典和列表,如果列表中存在一个值,我将打印它,否则如果形成字典,我将打印。用一个简单的方法很容易做到

if self.list.count(value) != 0:

但我认为可能有更优雅的方式来做到这一点。

谢谢!

【问题讨论】:

  • 第二个问题:if value in self.list

标签: python dictionary iteration


【解决方案1】:

对于第一个问题,使用OrderedDict

from collections import OrderedDict
d = OrderedDict()
d["A"] = "10"
d["B"] = "100"
d["C"] = "20"
d["D"] = "12.5"
for k in d:
    print k

OrderedDict 遵守插入元素的顺序。

对于你的第二个问题(你真的应该为不同的问题提出不同的问题),你可以使用in 来测试一个对象是否在列表中:

l = [1,2,3,4]
print 1 in l # prints True
print 5 in l # prints False

【讨论】:

  • @Yotam 注意x in mylist 检查不是很有效,所以如果你做很多这些检查,特别是如果列表不是很短,考虑转向mylist进入一个集合 (myset = set(mylist)) 并使用 that 来检查成员资格 (x in myset)。
【解决方案2】:

对于您问题的第一部分,请使用collections.OrderedDict

对于第二个,假设您仍然关心订单,您可以尝试(并假设 d 是原始字典):

tmp_dict = OrderedDict((x, x) for x in l)
tmp_dict.update(d)

您现在在tmp_dict 中拥有您关心的值(tmp_dict.values() 将显示它们)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 2019-09-18
    • 2015-01-04
    • 2013-07-15
    相关资源
    最近更新 更多