我试图弄清楚如何添加到词典列表,而不是创建词典列表的列表

时间:2019-03-27 03:19:11

标签: python dictionary

我有一个GetFunds函数,它返回一个字典。看起来像这样:

  

[{“ currency”:“ BTC”,“ available”:0.460594115839,   “保留”:0.0}]

在我看来,这就像是一本字典的清单。我想在列表中增加更多词典。所以我尝试这段代码:

funds=GetFunds(1, "BTC")
funds=funds+(GetFunds(2, "BTC"))
funds=funds + GetFunds(1, "DIVI")
funds=funds + GetFunds(2, "DIVI")
print(funds)

结果是列表列表(我认为)

  

[{       “ currency”:“ BTC”,       “可用”:0.460594115839,       “保留”:0.0}] [{       “ currency”:“ BTC”,       “可用”:0.460594115839,       “保留”:0.0}] [{       “ currency”:“ BTC”,       “可用”:2.002708880342,       “保留”:0.449841884826}] [{       “ currency”:“ DIVI”,       “可用”:6966346.17416024,       “保留”:0.0}] [{       “ currency”:“ DIVI”,       “可用”:6285691.0243108,       “保留”:795457.15508981}]

但是我想我想要一个包含4个元素的列表,每个元素都是一本字典....单套方括号

我尝试仅使用'+',我尝试了.append,但我想这只是针对字符串

如上所示

我想要一个包含多个词典的列表。

3 个答案:

答案 0 :(得分:1)

这是因为存在字符串,因此请使用json.loads

import json
funds=json.loads(GetFunds(1, "BTC"))
funds=funds + json.loads(GetFunds(2, "BTC"))
funds=funds + json.loads(GetFunds(1, "DIVI"))
funds=funds + json.loads(GetFunds(2, "DIVI"))
print(funds)

使用ast.literal_eval,建议少一点:

import ast
funds=ast.literal_eval(GetFunds(1, "BTC"))
funds=funds + ast.literal_eval(GetFunds(2, "BTC"))
funds=funds + ast.literal_eval(GetFunds(1, "DIVI"))
funds=funds + ast.literal_eval(GetFunds(2, "DIVI"))
print(funds)

答案 1 :(得分:0)

如果结果是列表,它应该可以工作:

a = {'a' : 1, 'b' : 2}
b = {'c' : 3, 'd' : 4}
aa = [a]
aa.extend([b])
aa

结果:

 [{'b': 2, 'a': 1}, {'c': 3, 'd': 4}]

所以:

funds=GetFunds(1, "BTC")
funds.extend((GetFunds(2, "BTC")))

应该工作。

否则,请检查它是否实际上是一个列表(似乎是列表)。

type(aa)
<class 'list'>

答案 2 :(得分:0)

我没有足够的声誉来发表评论,所以我发布了答案。

很明显,GetFunds通过查看您发布的第二个片段来返回字符串。没错,当您看到类似[{key:value}]的内容时,我的第一个冲动就是“这是一个字典的列表”。但是,在第二个代码段中,您会遇到类似[{key:value}] [{key:value}]的内容。这显然不是字典列表或字典列表的列表。词典列表看起来像[{{k:v},{k:v}]],而列表列表看起来像是[[{{k:v}],[{k:v}]]。这告诉我,当您以为要向列表中添加元素时,实际上是在串联两个字符串(它们之间恰好有字符使它看起来像一个列表,很可能与JSON一起使用)。请注意,方括号的前后是如何排列的。