如何使用嵌套字典列表

时间:2021-02-22 17:48:46

标签: python list dictionary

我正在使用 Robin-Stocks 库

https://readthedocs.org/projects/robin-stocks/downloads/pdf/latest/

特别是:

robin_stocks.robinhood.orders.get_all_open_stock_orders(info=None)

根据上面链接中的文档。这将返回键/值对的字典列表。我是使用 python 的新手,并不真正知道如何处理这些数据。如果我这样做:

myData = rs.orders.get_all_open_stock_orders()
print(myData)

简化的结果是:

[{'id': 'foo', 'last': {'amount': '3.79', 'cod': 'USD'}, 'peg': {'tp': 'per', 'per': 15}, 'sid': 'sel'}, {'id': 'bar', 'last': {'amount': '4.22', 'cod': 'USD'}, 'peg': {'tp': 'per', 'per': 18}, 'sid': 'sel'}, {'id': 'tom', 'last': None, 'peg': None, 'sid': 'sel'}]

实际上,列表要长得多。就像我说的,这是简化的。正如文档所说,它是键/值对的字典列表。例如,有一个键“id”和一个值“foo”,另一个键“id”和一个值“bar”,另一个键“id”和一个值“tom”,还有一个字典“last”:{ 'amount': '3.79', 'cod': 'USD'} 和另一个字典 'last': {'amount': '4.22', 'cod': 'USD'} 但有时键 'last' 有一个值的 None 而不是字典。

如果我想制作类似的东西:

test = some code i don't know how to do
print(test)

结果:

       amount
foo    3.79
bar    4.22
tom    None

我该怎么做?

同样,我将如何获得:

       peg
foo    15
bar    18
tom    None

是否有可能产生这个:

       amount     peg
foo    3.79       15
bar    4.22       18
tom    None       None

1 个答案:

答案 0 :(得分:0)

给定:

data = [{'id': 'foo', 'last': {'amount': '3.79', 'cod': 'USD'}, 'peg': {'tp': 'per', 'per': 15}, 'sid': 'sel'}, {'id': 'bar', 'last': {'amount': '4.22', 'cod': 'USD'}, 'peg': {'tp': 'per', 'per': 18}, 'sid': 'sel'}, {'id': 'tom', 'last': None, 'peg': None, 'sid': 'sel'}]

这个:

test = [(d['id'], (d.get('last') or {}).get('amount'), (d.get('peg') or {}).get('per')) for d in data]
print('\tamount\tpeg\n' + '\n'.join('\t'.join(map(str, item)) for item in test))

产生:

    amount  peg
foo 3.79    15
bar 4.22    18
tom None    None

请注意,只要没有字段值超过 TAB 的宽度,此打印语句只会保持列对齐。更好的方法是计算每列的最大字段长度并使用 width format specifier 将每列格式化为固定宽度。

相关问题