如果我有一個串列串列,例如
l=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
和一個字典,其值本身就是字典型別,例如
d={"id1":{"A": "", "C": "", "G": "", "T": ""},"id2":{"A":"","C":"","G":"","T":""},
"id3":{"A": "", "C": "", "G": "", "T": ""},"id4":{"A": "", "C": "", "G": "", "T": ""}}
我想遍歷串列和每個專案到 d 中的相應鍵,輸出就像
d={"id1":{"A": "1", "C": "2", "G": "3", "T": "4"},"id2":{"A":"5","C":"6","G":"7","T":"8"},
"id3":{"A": "9", "C": "10", "G": "11", "T": "12"},"id4":{"A": "13", "C": "14", "G": "15", "T": "16"}}
但相反,它給了我以下
{'id1': {'A': 15, 'C': 15, 'G': 15, 'T': 15}, 'id2': {'A': 15, 'C': 15, 'G': 15, 'T': 15}, 'id3': {'A': 15, 'C': 15, 'G': 15, 'T': 15}, 'id4': {'A': 15, 'C': 15, 'G': 15, 'T': 15}}
到目前為止我的代碼
for k,v in d.items():
for sub_k,sub_value in v.items():
for i in range(len(l)):
for j in range(len(l[i])):
d[k][sub_k]=l[i][j]
uj5u.com熱心網友回復:
您的代碼的問題是您在每個級別的 dict 上迭代兩次,因此,您看到的結果是最后一次迭代的結果。您可以通過執行以下操作來修復您的代碼:
for i, (k,v) in enumerate(d.items()):
for j, (sub_k,sub_value) in enumerate(v.items()):
d[k][sub_k]=str(l[i][j]) # adding str() allows to change the int to a str
enumerate允許您迭代您的 dict(例如 k,v)并訪問索引(例如 i)
uj5u.com熱心網友回復:
這是我的想法:
new_dict = list(zip(d.keys(), d.values(), l))
updated_dic = {}
for i in new_dict:
updated_dic[i[0]] = (dict(zip(i[1], i[2])))
輸出:
{'id1': {'A': 1, 'C': 2, 'G': 3, 'T': 4}, 'id2': {'A': 5, 'C': 6, 'G': 7, 'T': 8}, 'id3': {'A': 9, 'C': 10, 'G': 11, 'T': 12}, 'id4': {'A': 13, 'C': 14, 'G': 15, 'T': 16}}
uj5u.com熱心網友回復:
由于長度相匹配的,而是采用了雙for回圈,可以zip d與l到您遍歷一次創建的元組。使用dict壓縮迭代(內部字典鍵和子串列)上的建構式來構造內部字典。
for (Id, dct), vals in zip(d.items(), l):
d[Id] = dict(zip(dct, vals))
這可以更簡潔地寫成字典理解:
d = {Id: dict(zip(dct, vals)) for (Id, dct), vals in zip(d.items(), l)}
輸出:
{'id1': {'A': 1, 'C': 2, 'G': 3, 'T': 4},
'id2': {'A': 5, 'C': 6, 'G': 7, 'T': 8},
'id3': {'A': 9, 'C': 10, 'G': 11, 'T': 12},
'id4': {'A': 13, 'C': 14, 'G': 15, 'T': 16}}
uj5u.com熱心網友回復:
這將為您完成
l=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
d={"id1":{"A": "", "C": "", "G": "", "T": ""},"id2":{"A":"","C":"","G":"","T":""},
"id3":{"A": "", "C": "", "G": "", "T": ""},"id4":{"A": "", "C": "", "G": "", "T": ""}}
dl = [inner.keys() for inner in d.values()] # get a list of lists of the keys
print({f"id{i 1}": dict(zip(*p)) for i, p in enumerate(zip(dl, l))})
# first zip the sublists of values with the sublist of keys
# then zip the tuple of sublists of values and sublist of keys by unpacking it using *
# we get something like (("a", 1), ("b", 2)) which can be converted to a dict
# finally use dict comprehension to puth the id's back
但它相當難讀,所以需要評論
uj5u.com熱心網友回復:
整個代碼應如下所示:
d = {"id1":{"A": "", "C": "", "G": "", "T": ""},"id2":{"A":"","C":"","G":"","T":""},
"id3":{"A": "", "C": "", "G": "", "T": ""},"id4":{"A": "", "C": "", "G": "", "T": ""}}
l = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
for i, (k, v) in enumerate(d.items()):
for j, (k2, value) in enumerate(v.items()):
d[k][k2]=str(l[i][j])
print (d)
它解決了字串格式和放入字典中的值
uj5u.com熱心網友回復:
l = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
d = {"id1": {"A": "", "C": "", "G": "", "T": ""}, "id2": {"A": "", "C": "", "G": "", "T": ""},
"id3": {"A": "", "C": "", "G": "", "T": ""}, "id4": {"A": "", "C": "", "G": "", "T": ""}}
for index, key in enumerate(d.keys()):
for new_key, val in zip(d[key].keys(), l[index]):
d[key][new_key] = str(val)
print(d)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/404980.html
標籤:
上一篇:如何在d3js中選擇特定時間段?
