字典列表中的Python匹配键



我有以下字典列表,其中包含子字典数据:

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
]

直接访问eidkey的值可以做得更好:

matches = [
d["dep"]["eid"]
for d in data2
if d.get("dep") and d["dep"].get("eid") == match_key
]

相关内容

  • 没有找到相关文章

最新更新