[英]Access value by index from nested dictionary of lists
我正在構建包含列表的嵌套字典(因此嵌套鍵可以容納多個值):
#!/usr/bin/env python
from collections import defaultdict
import json
start = [1, 1, 19, 20, 30, 50, 50, 51]
events = ['event1', 'event1', 'event2', 'event2', 'event3', 'event4', 'event4', 'event4']
chroms = ['X', 'X', 'Y', 'Y', 1, 'Z', 'Z', 'Z', 'Z']
seen = defaultdict(lambda: defaultdict(dict))
for c, b, e in zip(chroms, start, events):
print c, b, e
seen[c].setdefault(b, []).append(e)
看起來像:
print(json.dumps(seen, indent=4))
{
"Y": {
"19": [
"event2"
],
"20": [
"event2"
]
},
"X": {
"1": [
"event1",
"event1"
]
},
"Z": {
"50": [
"event4",
"event4"
],
"51": [
"event4"
]
},
"1": {
"30": [
"event3"
]
}
}
如何按索引訪問列表值之一?
我試過了: print seen["X"]["1"][0]
,但是得到:
KeyError:0
由於要打印的輸出json.dumps(seen, indent=4)
一切都變得一個字符串( json.dumps
返回字符串,因此s
在dumps
)。
實際鍵是1
,而不是"1"
:
print(seen["X"][1][0])
# event1
出現KeyError: 0
的原因是由於您在dict
工廠中使用defaultdict
。 seen["X"]["1"]
不存在,因此創建了一個新的空字典:
print(seen["X"]["1"])
# {}
所以當然seen["X"]["1"][0]
將引發KeyError: 0
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.