【问题标题】:Get value from multiple dictionaries with same key从具有相同键的多个字典中获取值
【发布时间】:2021-03-18 10:56:50
【问题描述】:
我想从下面给定的代码中获取 Name 的值和 Salary 的值。
{
"records": [
{
"fieldName": "Name",
"value": "Alex"
},
{
"fieldName": "Age",
"value": "22"
},
{
"fieldName": "Salary",
"value": "235000.0"
},
{
"fieldName": "Entry.Date",
"value": "Sat Jan 02 00:00:00 GMT 2021"
}]
}
【问题讨论】:
标签:
python
python-3.x
list
dictionary
【解决方案1】:
首先解析整个事情:
out = {o['fieldName']: o['value'] for o in obj['records']}
输出:
{'Name': 'Alex',
'Age': '22',
'Salary': '235000.0',
'Entry.Date': 'Sat Jan 02 00:00:00 GMT 2021'}
然后抓住你想要的:
name, salary = out['Name'], out['Salary']
【解决方案2】:
我建议使用简单的基于for 循环的方法,因为列表理解需要对列表进行多次迭代:
data = {
"records": [
{
"fieldName": "Name",
"value": "Alex"
},
{
"fieldName": "Age",
"value": "22"
},
{
"fieldName": "Salary",
"value": "235000.0"
},
{
"fieldName": "Entry.Date",
"value": "Sat Jan 02 00:00:00 GMT 2021"
}]
}
name, salary = None, None
for record in data["records"]:
if record.get("fieldName") == "Name":
name = record.get("value")
if record.get("fieldName") == "Salary":
salary = record.get("value")
print(name, salary)
输出:
Alex 235000.0
【解决方案3】:
这假设字段恰好出现一次。如果不是,请删除冒号以获取包含所有值的列表。
name, = [d['value'] for d in your_dictionary['records'] if d['fieldName']=='Name']
salary, = [d['value'] for d in your_dictionary['records'] if d['fieldName']=='Salary']
【解决方案4】:
使用简单的理解方法
dct = {
"records": [
{
"fieldName": "Name",
"value": "Alex"
},
{
"fieldName": "Age",
"value": "22"
},
{
"fieldName": "Salary",
"value": "235000.0"
},
{
"fieldName": "Entry.Date",
"value": "Sat Jan 02 00:00:00 GMT 2021"
}]
}
data = {name : salary for (name, salary) in zip([d['value'] for d in dct['records'] if d['fieldName'] == 'Name'], [d['value'] for d in dct['records'] if d['fieldName'] == 'Salary'])}
print(data)