【问题标题】:How do I convert dict of dicts/nested dicts into dict of list如何将字典/嵌套字典的字典转换为列表字典
【发布时间】:2021-08-09 11:13:14
【问题描述】:

这是原始字典

uid_coins = {'141632864': {'username': 'Guest130679138', 'coins': 0}, 
        '141632884': {'username': 'Guest130679156', 'coins': 39123441}, 
        '141632886': {'username': 'Guest130679158', 'coins': 44006638}}

我想要得到什么

d = {'uid':[141632864, 141632884, 141632886], 
'username': ['Guest130679138', 'Guest130679156', 'Guest130679158'], 
'coins': [0, 39123441, 44006638]}

原始dict中的键代表uid。

这就是我所做的:

uid = list(uid_coins.keys())
username = [u_data['username'] for u_data in uid_coins.values()]
coins = [[u_data['coins'] for u_data in uid_coins.values()]]

d = {"uid":uid, "username":username, "coins":coins}


dict((key,d[key]) for d in data for key in d)

但我宁愿寻找一种通用方法,无需再次手动声明键即可实现,因此它应该与原始数据中的新键一起使用。

【问题讨论】:

  • 到目前为止你尝试了什么。你能显示代码不起作用以及它给出或输出的任何错误吗

标签: python list dictionary list-comprehension dictionary-comprehension


【解决方案1】:

试试:

uid_coins = {
    "141632864": {"username": "Guest130679138", "coins": 0},
    "141632884": {"username": "Guest130679156", "coins": 39123441},
    "141632886": {"username": "Guest130679158", "coins": 44006638},
}

out = {}
for k, v in uid_coins.items():
    out.setdefault("uid", []).append(k)
    out.setdefault("username", []).append(v["username"])
    out.setdefault("coins", []).append(v["coins"])

print(out)

打印:

{'uid': ['141632864', '141632884', '141632886'], 
 'username': ['Guest130679138', 'Guest130679156', 'Guest130679158'], 
 'coins': [0, 39123441, 44006638]}

【讨论】:

    【解决方案2】:

    与@Andrej Kesely 类似的版本,但带有defaultdict

    from collections import defaultdict
    
    uid_coins = {
        '141632864': {'username': 'Guest130679138', 'coins': 0}, 
        '141632884': {'username': 'Guest130679156', 'coins': 39123441}, 
        '141632886': {'username': 'Guest130679158', 'coins': 44006638}
    }
    
    d = defaultdict(list)
    for key, value in uid_coins.items():
        d['uid'].append(key)
        d['username'].append(value['username'])
        d['coins'].append(value['coins'])
        
    

    输出:

    defaultdict(<class 'list'>, {'uid': ['141632864', '141632884', '141632886'], 'username': ['Guest130679138', 'Guest130679156', 'Guest130679158'], 'coins': [0, 39123441, 44006638]})
    

    【讨论】:

      【解决方案3】:

      概括(基于 Andrej Kesely 的原始版本):

      d = {}
      for k, v in uid_coins.items():
          d.setdefault('uid', []).append(k)
          for i in v.keys():
              d.setdefault(i, []).append(v[i])
      

      【讨论】:

        【解决方案4】:

        这是您可以从给定字典中以所需格式(如问题所述)获取输出的方式。

        d = {'uid': list(uid_coins.keys()), 'username': [i['username'] for i in list(uid_coins.values())], 'coins': [i['coins'] for i in list(uid_coins.values())]}
        

        list(uid_coins.keys()) 会将你所有的 uid 作为列表返回。

        [i['username'] for i in list(uid_coins.values())] 将返回“用户名”值作为列表。

        [i['coins'] for i in list(uid_coins.values())] 将返回 'coins' 值作为列表。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-05
          • 1970-01-01
          • 2022-11-04
          • 1970-01-01
          • 2021-08-20
          相关资源
          最近更新 更多