我正在使用兩個具有多個值的串列創建字典,而不使用zip.
如果我有兩個這樣的串列:
store1=['mango,5', 'apple,10', 'banana,6']
store2=['mango,7', 'apple,8', 'banana,7']
如何創建這樣的字典:
dic={'mango':[5,7],'apple':[10,8],'banana':[6,7]}
uj5u.com熱心網友回復:
你可以用dict.setdefault,
In [2]: d = {}
...: for i in store1 store2:
...: key,value = i.split(',')
...: d.setdefault(key, []).append(int(value))
In [3]: d
Out[3]: {'mango': [5, 7], 'apple': [10, 8], 'banana': [6, 7]}
uj5u.com熱心網友回復:
您可以嘗試使用 2 個單獨的 for 回圈將它們添加到字典中
store1 = ['mango,5', 'apple,10', 'banana,6']
store2 = ['mango,7', 'apple,8', 'banana,7']
d = {}
for i in store1:
a, b = i.split(',')
if a not in d:
d[a] = []
d[a].append(int(b))
for i in store2:
a, b = i.split(',')
if a not in d:
d[a] = []
d[a].append(int(b))
print(d)
或使用嵌套的 for 回圈
store1 = ['mango,5', 'apple,10', 'banana,6']
store2 = ['mango,7', 'apple,8', 'banana,7']
d = {}
for i in [store1,store2]:
for j in i:
a, b = j.split(',')
if a not in d:
d[a] = []
d[a].append(int(b))
print(d)
uj5u.com熱心網友回復:
添加另一個解決方案而不使用zip只是連接給定的串列,從而創建一個大串列來迭代:
d={}
for store in (store1 store2):
key, val = store.split(",")
if key not in d:
d[key] = []
d[key].append(int(val))
uj5u.com熱心網友回復:
沒有zip,好的。
st1 = sorted([ e.split(',') for e in store1 ])
st2 = sorted([ e.split(',') for e in store2 ])
dic = { st1[i][0]: [ st1[i][1], st2[i][1] ] for i in range(len(st1))}
沒有zip,如果串列格式不正確。即順序不正確,或者兩個串列上可能都不存在鍵等。此解決方案具有更好的兼容性。
dic = { k:v for [k,v] in [ e.split(',') for e in store1 ] }
for [k,v] in [ e.split(',') for e in store2 ]:
if k in dic: dic[k].append(v)
else: dic[k]=[v]
用zip
一根線:
dic = { kv1.split(',')[0]: [kv1.split(',')[1], kv2.split(',')[1]] for kv1,kv2 in zip(store1,store2) }
zip,如果您的資料很大,另一種解決方案具有更好的運行時性能
st1 = [ e.split(',') for e in store1 ]
st2 = [ e.split(',') for e in store2 ]
dic = { kv1[0]: [ kv1[1], kv2[1] ] for kv1,kv2 in zip( st1, st2 ) }
uj5u.com熱心網友回復:
使用 dict.setdefault:
d = {}
for i in store1 store2:
key,value = i.split(',')
d.setdefault(key, []).append(int(value))
uj5u.com熱心網友回復:
變體#1...
from collections import defaultdict
r = defaultdict(list)
for s, i in [item.split(',') for item in store1 store2]: r[s].append(int(i))
變體#2...
如果我打算處理來自一個或多個商店的原始資訊,我可能有一個函式,我會追求可讀性而不是緊湊性,并使用型別提示:
def raw_store_info_to_dict(all_store_raw_info: list[str]) -> defaultdict[str,list[int]]:
all_stores_dict = defaultdict(list)
for s, i in [item.split(',') for item in chain.from_iterable(all_store_raw_info)]:
all_stores_dict[s].append(int(i))
return all_stores_dict
store1=['mango,5', 'apple,10', 'banana,6']
store2=['mango,7', 'apple,8', 'banana,7']
store3=['mango,17', 'apple,18', 'banana,17']
store4=['grape,3', 'cider,2', 'banana,77']
store5=['mango,27', 'apple,28', 'banana,37']
print(raw_store_info_to_dict([store1, store2, store3, store4, store5]))
# Output:
# defaultdict(<class 'list'>, {'mango': [5, 7, 17, 27], 'apple': [10, 8, 18, 28], 'banana': [6, 7, 17, 77, 37], 'grape': [3], 'cider': [2]})
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/515913.html
標籤:Python列表字典
下一篇:添加到嵌套串列
