[英]Add same key but different values (coming from list) to a nested dictionary
我设法抓取了一些内容并将其组织为这样的嵌套字典。
country_data = {
"US": {
"People": [
{
"Title": "Pres.",
"Name": "Joe"
},
{
"Title": "Vice",
"Name": "Harris"
}
]
}
}
然后我有这个清单
tw_usernames = ['@user1', '@user2']
我想用它来将每个项目列表添加到 People 嵌套字典的每个条目中。 我已经对列表和字典理解做了一些研究,但我找不到使它起作用的东西,所以我尝试了这个基本代码,但它当然不是我想要的,因为它返回所有项目列表。
for firstdict in country_data.values():
for dictpeople in firstdict.values():
for name in dictpeople:
name['Twitter'] = tw_usernames
print(name)
那么你会怎么做才能得到这样的字典呢?
country_data = {
"US": {
"People": [
{
"Title": "Pres.",
"Name": "Joe",
"Twitter": "@user1"
},
{
"Title": "Vice",
"Name": "Harris",
"Twitter": "@user2"
}
]
}
}
在此先感谢您提供任何可以教我的提示。
您可以 zip 使用用户名列表的子字典列表并迭代生成的对序列以将Twitter
键添加到每个子字典:
for person, username in zip(country_data['US']['People'], tw_usernames):
person['Twitter'] = username
使用您的示例输入, country_data
将变为:
{'US': {'People': [{'Title': 'Pres.', 'Name': 'Joe', 'Twitter': '@user1'}, {'Title': 'Vice', 'Name': 'Harris', 'Twitter': '@user2'}]}}
def add_twitter_usernames_to_users(country_data: dict, tw_usernames: [str]):
for tw_username in tw_usernames:
country_data["US"]["People"][tw_usernames.index(tw_username)]["Twitter"] = tw_username
return country_data
def test_add_twitter_usernames_to_users():
country_data = {
"US": {
"People": [
{
"Title": "Pres.",
"Name": "Joe"
},
{
"Title": "Vice",
"Name": "Harris"
}
]
}
}
tw_usernames = ['@user1', '@user2']
updated_country_data: dict = so.add_twitter_usernames_to_users(country_data, tw_usernames)
assert updated_country_data["US"]["People"][0]["Twitter"] == "@user1"
assert updated_country_data["US"]["People"][1]["Twitter"] == "@user2"
尝试这个。 我刚刚在您的逻辑中添加了索引。 它将根据索引选择用户名
idx = 0
tw_usernames = ['@user1', '@user2']
for firstdict in country_data.values():
for dictpeople in firstdict.values():
for name in dictpeople:
name['Twitter'] = tw_usernames[idx]
idx+=1
print(country_data)
output
{
"US":{
"People":[
{
"Title":"Pres.",
"Name":"Joe",
"Twitter":"@user1"
},
{
"Title":"Vice",
"Name":"Harris",
"Twitter":"@user2"
}
]
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.