Python更改字典形式

2024-04-18 05:53:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典

{
  "Brand_Name" : ["Samsung","Apple","Huawei","Nokia"], 
  "Link" : ["samsung-phones-9.php","apple-phones-48.php","huawei-phones-58.php","nokia-phones-1.php"]
}

我想把它转换成这个

{
    "Brand_Name" : "Samsung",
    "Link" : "samsung-phones-9.php"
},
{
    "Brand_Name" : "Apple",
    "Link" : "apple-phones-48.php"
},
{
    "Brand_Name" : "Huawei",
    "Link" : "huawei-phones-58.php"
},
{
    "Brand_Name" : "Nokia",
    "Link" : "nokia-phones-1.php"
}

Tags: nameapple字典linkphpbrandsamsungnokia
3条回答

使用列表理解:

d = {"Brand_Name" : ["Samsung","Apple","Huawei","Nokia"], 
     "Link" : ["samsung-phones-9.php","apple-phones-48.php","huawei-phones-58.php","nokia-phones-1.php"]}
k = list(d.keys())

[{k[0]: v1, k[1]: v2} for v1, v2 in zip(d[k[0]], d[k[1]])]

输出:

[{'Brand_Name': 'Samsung', 'Link': 'samsung-phones-9.php'},
 {'Brand_Name': 'Apple', 'Link': 'apple-phones-48.php'},
 {'Brand_Name': 'Huawei', 'Link': 'huawei-phones-58.php'},
 {'Brand_Name': 'Nokia', 'Link': 'nokia-phones-1.php'}]

dict的有序性将不重要,因为键总是与其值相关联。简单测试表明:

# test_dict.py
d = {"Brand_Name" : ["Samsung","Apple","Huawei","Nokia"],
     "Link" : ["samsung-phones-9.php","apple-phones-48.php","huawei-phones-58.php","nokia-phones-1.php"]}
k = list(d.keys())

print([{k[0]: v1, k[1]: v2} for v1, v2 in zip(d[k[0]], d[k[1]])])

多次测试(使用ubuntu16.04的默认python3测试,即3.5.2):

$ for i in {1..10}; do python3 test_dict.py; done
[{'Brand_Name': 'Samsung', 'Link': 'samsung-phones-9.php'}, {'Brand_Name': 'Apple', 'Link': 'apple-phones-48.php'}, {'Brand_Name': 'Huawei', 'Link': 'huawei-phones-58.php'}, {'Brand_Name': 'Nokia', 'Link': 'nokia-phones-1.php'}]
[{'Brand_Name': 'Samsung', 'Link': 'samsung-phones-9.php'}, {'Brand_Name': 'Apple', 'Link': 'apple-phones-48.php'}, {'Brand_Name': 'Huawei', 'Link': 'huawei-phones-58.php'}, {'Brand_Name': 'Nokia', 'Link': 'nokia-phones-1.php'}]
[{'Brand_Name': 'Samsung', 'Link': 'samsung-phones-9.php'}, {'Brand_Name': 'Apple', 'Link': 'apple-phones-48.php'}, {'Brand_Name': 'Huawei', 'Link': 'huawei-phones-58.php'}, {'Brand_Name': 'Nokia', 'Link': 'nokia-phones-1.php'}]
[{'Link': 'samsung-phones-9.php', 'Brand_Name': 'Samsung'}, {'Link': 'apple-phones-48.php', 'Brand_Name': 'Apple'}, {'Link': 'huawei-phones-58.php', 'Brand_Name': 'Huawei'}, {'Link': 'nokia-phones-1.php', 'Brand_Name': 'Nokia'}]
[{'Link': 'samsung-phones-9.php', 'Brand_Name': 'Samsung'}, {'Link': 'apple-phones-48.php', 'Brand_Name': 'Apple'}, {'Link': 'huawei-phones-58.php', 'Brand_Name': 'Huawei'}, {'Link': 'nokia-phones-1.php', 'Brand_Name': 'Nokia'}]
[{'Link': 'samsung-phones-9.php', 'Brand_Name': 'Samsung'}, {'Link': 'apple-phones-48.php', 'Brand_Name': 'Apple'}, {'Link': 'huawei-phones-58.php', 'Brand_Name': 'Huawei'}, {'Link': 'nokia-phones-1.php', 'Brand_Name': 'Nokia'}]
[{'Link': 'samsung-phones-9.php', 'Brand_Name': 'Samsung'}, {'Link': 'apple-phones-48.php', 'Brand_Name': 'Apple'}, {'Link': 'huawei-phones-58.php', 'Brand_Name': 'Huawei'}, {'Link': 'nokia-phones-1.php', 'Brand_Name': 'Nokia'}]
[{'Brand_Name': 'Samsung', 'Link': 'samsung-phones-9.php'}, {'Brand_Name': 'Apple', 'Link': 'apple-phones-48.php'}, {'Brand_Name': 'Huawei', 'Link': 'huawei-phones-58.php'}, {'Brand_Name': 'Nokia', 'Link': 'nokia-phones-1.php'}]
[{'Link': 'samsung-phones-9.php', 'Brand_Name': 'Samsung'}, {'Link': 'apple-phones-48.php', 'Brand_Name': 'Apple'}, {'Link': 'huawei-phones-58.php', 'Brand_Name': 'Huawei'}, {'Link': 'nokia-phones-1.php', 'Brand_Name': 'Nokia'}]
[{'Link': 'samsung-phones-9.php', 'Brand_Name': 'Samsung'}, {'Link': 'apple-phones-48.php', 'Brand_Name': 'Apple'}, {'Link': 'huawei-phones-58.php', 'Brand_Name': 'Huawei'}, {'Link': 'nokia-phones-1.php', 'Brand_Name': 'Nokia'}]

只改变了外观的顺序,但没有改变链接。你知道吗

嗯,所以你有两个列表,你想把它们成对地合并起来?在这种情况下,zip正是您想要的:

d1 = {
    "Brand_Name" : ["Samsung","Apple","Huawei","Nokia"]
    "Link" : ["samsung-phones-9.php","apple-phones-48.php","huawei-phones-58.php","nokia-phones-1.php"]
}

pairs = zip(d1["Brand_Name"], d1["Link"])
d2 = dict(pairs)
print(d2)

你可以用ziplist理解

>>> x = 'Brand_Name': ['Samsung', 'Apple', 'Huawei', 'Nokia'], 'Link': ['samsung-phones-9.php', 'apple-phones-48.php', 'huawei-phones-58.php', 'nokia-phones-1.php']}
>>> [{'Brand_Name': brand, 'Link': link} for brand,link in zip(x['Brand_Name'], x['Link'])]
[{'Brand_Name': 'Samsung', 'Link': 'samsung-phones-9.php'}, {'Brand_Name': 'Apple', 'Link': 'apple-phones-48.php'}, {'Brand_Name': 'Huawei', 'Link': 'huawei-phones-58.php'}, {'Brand_Name': 'Nokia', 'Link': 'nokia-phones-1.php'}]

相关问题 更多 >