从嵌套列表字典按索引访问值

2024-04-19 10:22:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个包含列表的嵌套字典(因此嵌套键可以包含多个值):

#!/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


Tags: importjson列表字典usreventsstartprint
1条回答
网友
1楼 · 发布于 2024-04-19 10:22:31

因为您正在打印json.dumps(seen, indent=4)的输出,所以所有内容都变成一个字符串(json.dumps返回一个字符串,因此dumps中的s)。你知道吗

实际键是1,而不是"1"

print(seen["X"][1][0])
# event1

您得到KeyError: 0的原因是因为您使用的是带有dict工厂的defaultdictseen["X"]["1"]不存在,因此将创建一个新的空字典:

print(seen["X"]["1"])
# {}

当然seen["X"]["1"][0]会引发KeyError: 0。你知道吗

相关问题 更多 >