[英]Creating a nested dictionary from a list
我有一個Final_Bioteck
列表,其前5個Final_Bioteck
看起來像這樣:
['PBYI', 'DRRX', 'FBIO', 'CAPR', 'KDMN']
我正在嘗試創建一個嵌套的字典,第一層是字母,第二層是上述列表中的元素。 我正在嘗試創建索引字典。
我嘗試使用以下代碼進行操作:
from string import ascii_uppercase
Bioteck_dict ={}
for letter in ascii_uppercase:
for stock in Final_Bioteck:
if stock.startswith(letter):
try:
Bioteck_dict[letter].update(stock)
except KeyError:
Bioteck_dict[letter] = stock
但是,出現以下錯誤:
'str' object has no attribute 'update'
所需的輸出是這樣的:
Bioteck_dict
{A:
B:
C: 'CAPR':{}
D: 'DRRX':{}
E:
F:
甚至這個:
{A:
B:
C: 'CAPR'
D: 'DRRX'
E:
F: 'FBIO':
}
.update()
是用於.update()
的方法,您可以在字符串上調用它。 這是一種執行您想要的操作的方法:
Final_Bioteck = ['PBYI', 'DRRX', 'FBIO', 'CAPR', 'KDMN']
Bioteck_dict = {}
for stock in Final_Bioteck:
Bioteck_dict.setdefault(stock[0], {})[stock] = {}
在對問題進行更新之后,您似乎希望將沒有關聯庫存的信件在dict
明確表示為空容器。 這是值得懷疑是否真的需要(大多數事情,你會隨后想做將只涉及迭代是什么在dict
),但你可以在以下兩種方式之一是效果:
等等:
Final_Bioteck = ['PBYI', 'DRRX', 'FBIO', 'CAPR', 'KDMN']
from collections import defaultdict
Bioteck_dict = defaultdict(dict) # now you can look up any letter (or any key at all) and receive the empty dict, even if there was no entry there before
for stock in Final_Bioteck:
Bioteck_dict[stock[0]][stock] = {}
要么:
Final_Bioteck = ['PBYI', 'DRRX', 'FBIO', 'CAPR', 'KDMN']
Bioteck_dict = {letter:{} for letter in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'}
for stock in Final_Bioteck:
Bioteck_dict[stock[0]][stock] = {}
問題是您要將每個字典值分配為字符串,而不是字典。 它需要作為命令開始,以便您可以對其進行更新。 'FBIO'.update(blah)
沒有意義。 此外,您可能想要列表的字典,而不是字典的字典-關鍵是什么?
from collections import defaultdict
Bioteck_dict = defaultdict(list) # Or `set`, if unique and unordered.
for stock in Final_Bioteck:
Bioteck_dict[stock[0]].append(stock)
結果是:
{'C': ['CAPR'], 'D': ['DRRX'], 'F': ['FBIO'], 'K': ['KDMN'], 'P': ['PBYI']}
這有點類似於您的邏輯:
from string import ascii_uppercase
stocks = ['PBYI', 'DRRX', 'FBIO', 'CAPR', 'KDMN']
d = {}
for letter in ascii_uppercase:
d[letter] = {}
for stock in stocks:
if stock.startswith(letter):
d[letter][stock] = {}
print d
返回:
{'A': {}, 'C': {'CAPR': {}}, 'B': {}, 'E': {}, 'D': {'DRRX': {}}, 'G': {}, 'F': {'FBIO': {}}, 'I': {}, 'H': {}, 'K': {'KDMN': {}}, 'J': {}, 'M': {}, 'L': {}, 'O': {}, 'N': {}, 'Q': {}, 'P': {'PBYI': {}}, 'S': {}, 'R': {}, 'U': {}, 'T': {}, 'W': {}, 'V': {}, 'Y': {}, 'X': {}, 'Z': {}}
如果有唯一記錄,則使用dict理解。
l = ['PBYI', 'DRRX', 'FBIO', 'CAPR', 'KDMN']
d = { i[0]:i for i in l}
pprint(d)
輸出:
{'C': 'CAPR', 'D': 'DRRX', 'F': 'FBIO', 'K': 'KDMN', 'P': 'PBYI'}
如果有多個記錄,請使用defaultdict。
l = ['PBYI', 'DRRX', 'FBIO', 'CAPR', 'KDMN', 'DUMMY','CAT','COLD']
from collections import defaultdict
d = defaultdict(list)
for i in l:
d[i[0]].append(i)
pprint(d)
輸出:
defaultdict(<class 'list'>,
{'C': ['CAPR', 'CAT', 'COLD'],
'D': ['DRRX', 'DUMMY'],
'F': ['FBIO'],
'K': ['KDMN'],
'P': ['PBYI']})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.