簡體   English   中英

防止OrderedDict在迭代過程中將單個字符串值拆分為字符

[英]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"])]

更妙的是 ,如果你已經有了可用的字典,只是擴展(解壓縮)字典someDictsomeOrderedDict利用**語法:

someOrderedDict = OrderedDict(**someDict)

它同樣運作良好, 看起來更緊湊和干凈

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM