我有以下字典列表,其中包含子字典数据:
data2 = [
{"dep": None},
{"dep": {
"eid": "b3ca7ddc-0d0b-4932-816b-e74040a770ec",
"nid": "fae15b05-e869-4403-ae80-6e8892a9dbde",
}
},
{"dep": None},
{"dep": {
"eid": "c3bcaef7-e3b0-40b6-8ad6-cbdb35cd18ed",
"nid": "6a79c93f-286c-4133-b620-66d35389480f",
}
},
]
我有一个匹配键
match_key = "b3ca7ddc-0d0b-4932-816b-e74040a770ec"
我想看看每个"dep"data2中的Key有一个与我的match_key匹配的eid。我正在尝试以下,但我得到一个TypeError:字符串索引必须是整数-我在哪里出错?
我的代码
matches = [
d["eid"]
for item in data2
if item["dep"]
for d in item["dep"]
if d["eid"] == match_key
]
所以匹配应该返回:
["b3ca7ddc-0d0b-4932-816b-e74040a770ec"]
表示在data2中找到了这个id。
当您遍历字典时,每次迭代都会从字典中获得一个键。
所以d["eid"]
实际上是"eid"["eid"]
,这是一个无效表达式。这就是Python抛出以下异常的原因:
TypeError: string index必须是整数
同样,表达式d["eid"]
假定每个d
包含eid
键。如果没有,Python将引发KeyError
.
如果你不确定是字典中有效的键,建议使用.get
方法。
matches = [
v
for item in data2
if item.get("dep") # Is there a key called dep, and it has a non-falsy value in it
for k, v in item["dep"].items() # Iterate over the dictionary items
if k == "eid" and v == match_key
]
直接访问eid
key的值可以做得更好:
matches = [
d["dep"]["eid"]
for d in data2
if d.get("dep") and d["dep"].get("eid") == match_key
]