【问题标题】:Python change dictionary format [closed]Python更改字典格式[关闭]
【发布时间】:2019-09-11 05:03:13
【问题描述】:

我有以下字典

{
  "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"
}

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    使用列表理解:

    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]])])
    

    多次测试(使用ubuntu 16.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'}]
    

    只有外观的顺序改变了,链接没有改变。

    【讨论】:

    • 为额外的里程点赞 :)
    • 感谢您的快速回复。你拯救了我的一天。
    【解决方案2】:

    您可以将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'}]
    

    【讨论】:

      【解决方案3】:

      嗯,所以你有两个列表,你想成对合并它们吗?在这种情况下,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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-02
        • 1970-01-01
        • 2013-07-13
        • 1970-01-01
        • 1970-01-01
        • 2012-06-07
        • 2013-11-20
        相关资源
        最近更新 更多