我想使OrderedDict
具有每个键的字符串和每个值的字符串列表。
from collections import OrderedDict
# Compare a dict with an OrderedDict
someDict = dict(a = ["foo","bar"], b = ["baz"])
someOrderedDict = OrderedDict([("a",("foo","bar")),("b",("baz"))])
我需要遍历这个字典,同时访问键和值。在vanilla字典中,这很简单:
for k,v in someDict.items():
for eachv in v:
print("do something with key = " + k + " and value = " + eachv)
# returns the desired output:
# do something with key = a and value = foo
# do something with key = a and value = bar
# do something with key = b and value = baz
(如果这可以在理解中完成,请给我启发——我想不出如何在不丢失钥匙的情况下做到这一点。)
当我在OrderedDict
上尝试时,我得到:
for k,v in someOrderedDict.items():
for eachv in v:
print("do something with key = " + k + " and value = " + eachv)
# results in undesirable splitting of value "baz" into ["b","a","z"]:
# do something with key = a and value = foo
# do something with key = a and value = bar
# do something with key = b and value = b
# do something with key = b and value = a
# do something with key = b and value = z
我做错了什么?
这是因为您将字符串(("baz")
)分配给b
键,而不是元组(("baz",)
)或字符串列表。
someOrderedDict = OrderedDict([("a",("foo","bar")),("b",("baz"))])
试
someOrderedDict = OrderedDict([("a",("foo","bar")),("b",("baz",))])
(注意逗号)
您可以在"baz"
之后添加,
,以便在for
循环期间将其解释为元组而不是单个str
:
someOrderedDict = OrderedDict([("a",("foo","bar")),("b",("baz",))])
然后,迭代可以很好地抓取元组baz
:
for k,v in someOrderedDict.items():
for eachv in v:
print("do something with key = " + k + " and value = " + eachv)
do something with key = b and value = baz
do something with key = a and value = foo
do something with key = a and value = bar
同样可以通过包装[]
:
[("a", ["foo","bar"]),("b", ["baz"])]
更好的是,如果您已经有可用的字典,只需利用**
语法在someOrderedDict
中展开(解压缩)字典someDict
:
someOrderedDict = OrderedDict(**someDict)
效果同样好,看起来更加紧凑和干净。