[英]prevent OrderedDict from splitting single string value into characters during iteration
我想為每個鍵創建一個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"))])
我需要遍歷此字典以訪問鍵和值。 在普通字典中,這很簡單:
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
我究竟做錯了什么?
這是因為您要為b
鍵分配一個字符串( ("baz")
)而不是一個元組( ("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"])]
更妙的是 ,如果你已經有了可用的字典,只是擴展(解壓縮)字典someDict
在someOrderedDict
利用**
語法:
someOrderedDict = OrderedDict(**someDict)
它同樣運作良好, 看起來更緊湊和干凈 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.