簡體   English   中英

如何根據所有詞典中都不存在的特定鍵值從詞典列表中獲取值?

[英]How to get value from list of dictionaries based on specific key value which does not exist in all dictionaries?

我有一個這樣的字典列表:

{'name': ['Sam'], 'where': ['London']},
{'name': ['Jon'], 'where': ['NY']},
{'name': ['Jon'], 'hobby': ['fifa']},
{'Age': ['20'], 'Country': ['US']},

我確實有一本這樣的字典,它可能有很多相同的鍵,但很多也沒有那個鍵。 如上例,我們在前 3 個中有 name key,但在第 4 個中沒有 name key。 我正在嘗試獲取具有鍵“名稱”的所有值的列表。

謝謝

您想要什么不清楚(也不清楚指向的鏈接)。

如果您只是想要 name 存在的值:

l = [{'name': ['Sam'], 'where': ['London']},
     {'name': ['Jon'], 'where': ['NY']},
     {'name': ['Jon'], 'hobby': ['fifa']},
     {'Age': ['20'], 'Country': ['US']},]

out = [d['name'] for d in l if 'name' in d]
# [['Sam'], ['Jon'], ['Jon']]

# or as flat list
out = [name for d in l if 'name' in d for name in d['name']]
# ['Sam', 'Jon', 'Jon']

# or just the first name
out = [d['name'][0] for d in l if 'name' in d]
# ['Sam', 'Jon', 'Jon']

這是一種提取所有名稱的方法:

data = [
    {'name': ['Sam'], 'where': ['London']},
    {'name': ['Jon'], 'where': ['NY']},
    {'name': ['Jon'], 'hobby': ['fifa']},
    {'Age': ['20'], 'Country': ['US']},
]

names = [item['name'][0] for item in data if 'name' in item]
print(names)

結果:

['Sam', 'Jon', 'Jon']

我假設您的數據是一個字典列表。

data = [{'name': ['Sam'], 'where': ['London']},
{'name': ['Jon'], 'where': ['NY']},
{'name': ['Jon'], 'hobby': ['fifa']},
{'Age': ['20'], 'Country': ['US']},]

您可以獲得具有名稱鍵的所有元素的子列表,如下所示:

output = [elem for elem in data if elem.get("name")]

有很多方法可以做到這一點。 一個是:

_list = [{'name': ['Sam'], 'where': ['London']},
{'name': ['Jon'], 'where': ['NY']},
{'name': ['Jon'], 'hobby': ['fifa']},
{'Age': ['20'], 'Country': ['US']}]

print(*(name for d in _list if (name := d.get('name'))))

Output:

['Sam'] ['Jon'] ['Jon']

您可以嘗試列表表達式:

all_dicts = [{'name': ['Sam'], 'where': ['London']},
{'name': ['Jon'], 'where': ['NY']},
{'name': ['Jon'], 'hobby': ['fifa']},
{'Age': ['20'], 'Country': ['US']}]

dicts_with_name = [d.values() for d in all_dicts if 'name' in d.keys() ]

這將提取列表中那些具有名稱字段的字典的所有值(對於所有鍵)。 如果你想要鍵值對,你可以d.items()而不是d.values()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM