在決議一個 .txt 字串檔案后,我創建了兩個字典。
Dict1 是一對 key(string) : value(list[string]].
Dict2 是 dict1 的列舉,使得 key(int) : value(string--the key from dict1)
我正在嘗試創建第三個字典,其中 dict1 中的值作為 key(int): Value (list[int]) 形式的向量/串列
dict1 = {'Foo': ['Lorem', 'Ipsum'], 'Bar':['Dolor', 'Sit', 'Amet'], 'Baz':['Consectetur', 'Adipiscing', 'Elit', 'Sed'], 'Lorem':['Foo', 'Do']}
dict2 = {1: 'Foo', 2: 'Bar', 3: 'Baz', 4: 'Lorem', 5: 'Ipsum', 6: 'Dolor', 7: 'Sit', 8: 'Amet', 9: 'Consectetur', 10: 'Adipiscing', 11: 'Elit', 12: 'Sed', 13: 'Do'}
例如,我想要
dict3 = {1: [4, 5], 2: [6, 7, 8], 3:[9, 10, 11, 12], 4:[1, 13]... & so on}
什么是解決這個問題的有效方法?
uj5u.com熱心網友回復:
您在評論中的直覺是正確的,首先創建一個與dict2相反的新映射:
dict4 = {v: k for k, v in dict2.items()}
然后,您可以使用以下(誠然復雜的)嵌套dict和list理解創建 dict3:
dict3 = {k: [dict4[v2] for v2 in dict1[v] if v2 in dict4] for k, v in dict2.items() if v in dict1}
uj5u.com熱心網友回復:
# original dicts
dict1 = {'Foo': ['Lorem', 'Ipsum'], 'Bar':['Dolor', 'Sit', 'Amet']}
dict2 = {1: 'Foo', 2: 'Bar', 3: 'Baz', 4: 'Lorem', 5: 'Ipsum', 6: 'Dolor', 7: 'Sit', 8: 'Amet' }
# invert keys and vals from dict2
d2_index = { v: i for i, v in zip( dict2.keys(), dict2.values() ) }
# map indices to values
{
d2_index[ k ]: [
d2_index[ v ]
for v in vs
]
for k, vs in dict1.items()
}
uj5u.com熱心網友回復:
不會有一種特別有效的方法來解決這個問題,因為這幾乎是設計一個 O(n) 或 O(n * m) 問題。最好的方法是遍歷dict1以訪問每個鍵的int值,并對關聯值串列中的每個值執行相同的操作:
dict3 = dict()
for key, value in dict1.items():
key_int = dict2[key]
value_ints = [dict2[i] for i in value]
dict3[key_int] = value_ints
或作為理解:
dict3 = { dict2[key]: [dict2[i] for i in value] for key, value in dict1.items() }
確保您將任一解決方案包裝在一個try塊中,以捕獲KeyError可能dict為不存在的值引發的 sdict2
uj5u.com熱心網友回復:
您可以交換鍵和值dict2
dict1 = {'Foo': ['Lorem', 'Ipsum'], 'Bar':['Dolor', 'Sit', 'Amet']}
dict2 = {1: 'Foo', 2: 'Bar', 3: 'Lorem', 4: 'Ipsum', 5: 'Dolor', 6: 'Sit', 7: 'Amet'}
dict2_reversed = {value: key for key, value in dict2.items()}
然后使用字典理解來創建最終字典。您還需要對值進行嵌套串列理解:
>>> {dict2_reversed[key]: [dict2_reversed[v] for v in value]
for key, value in dict1.items()}
{1: [3, 4], 2: [5, 6, 7]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/454570.html
下一篇:比較Python中的內部字典
