繁体   English   中英

重新排序字典列表中的字典键

[英]Reordering dictionaries keys in a list of dictionaries

目前,我正在使用以这种格式返回数据的 API:我将它分配给变量quote_data =

{'candles': [{'close': 319.88,
              'datetime': 1549000800000,
              'high': 324.24,
              'low': 288.7701,
              'open': 305.42,
              'volume': 128550254},
             {'close': 279.86,
              'datetime': 1551420000000,
              'high': 307.13,
              'low': 254.46,
              'open': 306.94,
              'volume': 213788920},
             {'close': 238.69,
              'datetime': 1554094800000,
              'high': 296.17,
              'low': 231.13,
              'open': 282.62,
              'volume': 230757870},
             {'close': 185.16,
              'datetime': 1556686800000,
              'high': 258.3499,
              'low': 184.1,
              'open': 238.85,
              'volume': 282598840},
             {'close': 223.46,
              'datetime': 1559365200000,
              'high': 234.74,
              'low': 176.9919,
              'open': 185.51,
              'volume': 214970560},
             {'close': 241.61,
              'datetime': 1561957200000,
              'high': 266.07,
              'low': 222.22,
              'open': 230.21,
              'volume': 199371370},
             {'close': 225.61,
              'datetime': 1564635600000,
              'high': 244.51,
              'low': 211.0,
              'open': 242.65,
              'volume': 134103755},
             {'close': 240.87,
              'datetime': 1567314000000,
              'high': 253.5,
              'low': 218.36,
              'open': 224.08,
              'volume': 136563110},
             {'close': 314.92,
              'datetime': 1569906000000,
              'high': 340.84,
              'low': 224.28,
              'open': 241.5,
              'volume': 235119040},
             {'close': 329.94,
              'datetime': 1572584400000,
              'high': 361.2,
              'low': 309.26,
              'open': 316.32,
              'volume': 157892380},
             {'close': 418.33,
              'datetime': 1575180000000,
              'high': 435.31,
              'low': 327.25,
              'open': 329.4,
              'volume': 207390450},
             {'close': 542.2199,
              'datetime': 1577858400000,
              'high': 547.41,
              'low': 421.71,
              'open': 424.5,
              'volume': 247878770}],
 'empty': False,
 'symbol': 'TSLA'}

我只对这本词典的“蜡烛”部分感兴趣,它给我留下了一个词典列表。 但是要插入数据库,我需要:

  1. 为每个字典插入 2 个新的字典键:

{'candle':“我需要为每个字典枚举这个键(例如:1、2、3、4)”}

{'符号':'TSLA'}

  1. 然后我需要根据每个字典的键对字典重新排序:

[{'candle', 'symbol', 'datetime', 'close', 'high', 'low', 'open', 'volume'}]

  1. 将它转换为元组列表,我一直在使用这段代码来做到这一点:

[元组 (v) for v in map(dict.values, quote_data['candles'])]

这给了我一个元组列表,其中包含每个字典的值。

我尝试了几种不同的字典重新排序方法,但都没有成功。 如果有人能够提供帮助,那将是一个巨大的帮助!

与其尝试对字典进行排序,不如将其转换为具有您想要的顺序的两个元素元组的列表:

rows = [[
      ('candle', index),
      ('symbol', response['symbol']),
      ('datetime', d['datetime']),
      ('close', d['close']),
      ('high', d['high']),
      ('low', d['low']),
      ('open', d['open']),
      ('volume', d['volume']),
    ] for index, d in enumerate(response['candles']) ]
print(*rows, sep='\n')

输出:

[('candle', 0), ('symbol', 'TSLA'), ('datetime', 1549000800000), ('close', 319.88), ('high', 324.24), ('low', 288.7701), ('open', 305.42), ('volume', 128550254)]
[('candle', 1), ('symbol', 'TSLA'), ('datetime', 1551420000000), ('close', 279.86), ('high', 307.13), ('low', 254.46), ('open', 306.94), ('volume', 213788920)]
[('candle', 2), ('symbol', 'TSLA'), ('datetime', 1554094800000), ('close', 238.69), ('high', 296.17), ('low', 231.13), ('open', 282.62), ('volume', 230757870)]
[('candle', 3), ('symbol', 'TSLA'), ('datetime', 1556686800000), ('close', 185.16), ('high', 258.3499),('low', 184.1), ('open', 238.85), ('volume', 282598840)]
[('candle', 4), ('symbol', 'TSLA'), ('datetime', 1559365200000), ('close', 223.46), ('high', 234.74), ('low', 176.9919), ('open', 185.51), ('volume', 214970560)]
[('candle', 5), ('symbol', 'TSLA'), ('datetime', 1561957200000), ('close', 241.61), ('high', 266.07), ('low', 222.22), ('open', 230.21), ('volume', 199371370)]
[('candle', 6), ('symbol', 'TSLA'), ('datetime', 1564635600000), ('close', 225.61), ('high', 244.51), ('low', 211.0), ('open', 242.65), ('volume', 134103755)]
[('candle', 7), ('symbol', 'TSLA'), ('datetime', 1567314000000), ('close', 240.87), ('high', 253.5), ('low', 218.36), ('open', 224.08), ('volume', 136563110)]
[('candle', 8), ('symbol', 'TSLA'), ('datetime', 1569906000000), ('close', 314.92), ('high', 340.84), ('low', 224.28), ('open', 241.5), ('volume', 235119040)]
[('candle', 9), ('symbol', 'TSLA'), ('datetime', 1572584400000), ('close', 329.94), ('high', 361.2), ('low', 309.26), ('open', 316.32), ('volume', 157892380)]
[('candle', 10), ('symbol', 'TSLA'), ('datetime', 1575180000000), ('close', 418.33), ('high', 435.31), ('low', 327.25), ('open', 329.4), ('volume', 207390450)]
[('candle', 11), ('symbol', 'TSLA'), ('datetime', 1577858400000), ('close', 542.2199), ('high', 547.41), ('low', 421.71), ('open', 424.5), ('volume', 247878770)]

大多数数据库应该采用元组列表。

如果不是那么就把它变回字典,只要你使用 Python3.7+ 它就会保留它的顺序:

rows = [dict(row) for row in rows]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM