Python 字典列表中的匹配键
Python matching keys in list of dicitonaries
我有以下词典列表,其中包含子词典数据:
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"
而且我想查看 data2 中每个“dep”键的子词典是否有与我的 match_key 相匹配的 eid。我正在尝试以下操作,但出现 TypeError: string indices must be integers - 我哪里出错了?
我的代码
matches = [
d["eid"]
for item in data2
if item["dep"]
for d in item["dep"]
if d["eid"] == match_key
]
所以匹配应该 return:
["b3ca7ddc-0d0b-4932-816b-e74040a770ec"]
意味着它在 data2 中找到了这个 id。
当您遍历字典时,每次迭代都会从字典中为您提供一个 key。
所以d["eid"]
实际上是"eid"["eid"]
,这是一个无效的表达式。这就是 Python 引发以下异常的原因:
TypeError: string indices must be integers
此外,表达式 d["eid"]
假定每个 d
都包含 eid
键。如果没有,Python 将引发 KeyError
.
如果您不确定“eid”是否是字典中的有效键,请改用 .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
键的值来做得更好:
matches = [
d["dep"]["eid"]
for d in data2
if d.get("dep") and d["dep"].get("eid") == match_key
]
我有以下词典列表,其中包含子词典数据:
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"
而且我想查看 data2 中每个“dep”键的子词典是否有与我的 match_key 相匹配的 eid。我正在尝试以下操作,但出现 TypeError: string indices must be integers - 我哪里出错了?
我的代码
matches = [
d["eid"]
for item in data2
if item["dep"]
for d in item["dep"]
if d["eid"] == match_key
]
所以匹配应该 return:
["b3ca7ddc-0d0b-4932-816b-e74040a770ec"]
意味着它在 data2 中找到了这个 id。
当您遍历字典时,每次迭代都会从字典中为您提供一个 key。
所以d["eid"]
实际上是"eid"["eid"]
,这是一个无效的表达式。这就是 Python 引发以下异常的原因:
TypeError: string indices must be integers
此外,表达式 d["eid"]
假定每个 d
都包含 eid
键。如果没有,Python 将引发 KeyError
.
如果您不确定“eid”是否是字典中的有效键,请改用 .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
键的值来做得更好:
matches = [
d["dep"]["eid"]
for d in data2
if d.get("dep") and d["dep"].get("eid") == match_key
]