python - 转换字典 python

标签 python dictionary key

我有一个这种形式的字典列表:

d_old=[{"color":"red","store":"1","s_d":{"M":"1","L":"2"}},       
       {"color":"blue","store":"2","s_d":{"S":"3","XL":"4"}}]

我的目标是将其转变为:

d_new=[{"color":"red","store":"1","Size":"M", "Stock":"1"},
       {"color":"red","store":"1","Size":"L", "Stock":"2"},
       {"color":"blue","store":"2","Size":"S", "Stock":"3"},
       {"color":"blue","store":"2","Size":"XL", "Stock":"4"}]

我写了这个,它有效,但我想知道是否有更好的方法: 键总是在列表中定义,这里为了简单起见,只显示了 2 个键,还有更多。

def transform_data(d_old):
    d_new_list =[]
    headers=["color","store"]
    for d in d_old:
        for key,value in d["s_d"].items():
            temp_dict = {header:d[header] for header in headers}
            temp_dict["Size"] = key
            temp_dict["Stock"] = value
            d_new_list.append(temp_dict)

最佳答案

你可以使用嵌套的 list comprehension :

d_old = [{'color': 'red', 'store': '1', 's_d': {'M': '1', 'L': '2'}},
         {'color': 'blue', 'store': '2', 's_d': {'S': '3', 'XL': '4'}}]

d_new = [{'color': item['color'], 'store': item['store'],
          'size': size, 'stock': stock}
         for item in d_old for size, stock in item['s_d'].items()]

如果您不想对按键进行硬编码:

d_new = [dict({key: values for key, values in item.items() if key != 's_d'},
              size=size, stock=stock)
         for item in d_old for size, stock in item['s_d'].items()]

关于python - 转换字典 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43520238/

相关文章:

ruby - 按另一个散列中的值对散​​列进行排序

python - 在python中指定csv文件中输入数据的列

python - 如何将加速度加到速度上?

python - 使用 python 正则表达式删除括号之间的内容

python - 如何使用列表理解在循环内进行列表展平?

python - 问题将 IP 地址字符串从 for 循环附加到列表

python - 将两种模式与 Python 中的命名捕获组结合起来?

python - 在python中创建认识其他 friend 的 friend 字典

java - 在 Java 中从哈希表中获取没有值的键

c# - .net 键枚举 ToString() 与 BackSlash 一起使用 '\'