我有一个dict列表:
select distinct email from tablename
因为密钥完全相同所以我想合并它并从字典中创建一个列表。 到目前为止,我已经尝试过这个:
output = [{"latitude": 28.6333}, {"latitude": 28.6333}, {"latitude": 28.65}]
但我给了我一个错误d = []
for k in output.iterkeys():
d[k] = list(d[k] for d in output)
print d
我在这里做错了什么。
预期产出:
AttributeError: 'str' object has no attribute 'iterkeys'
对于将此问题标记为重复的人。我刚刚发现我的查询与我的[28.6333, 28.6333, 28.65]
不同而不是int或float这就是为什么当我写AttributeError时没有人指出为什么dict是float值的类型是str。这就是我没有让它发挥作用的原因。
当我将所有单独的答案作为一个单独的程序运行时,我得到了我想要的东西,但这肯定不符合我的程序的要求
答案 0 :(得分:2)
这样做
[x["latitude"] for x in output]
答案 1 :(得分:2)
试试这个解决方案。
d = [ k["latitude"] for k in output]
答案 2 :(得分:2)
您可以迭代dicts列表,并获取值,使它们成为迭代器(iter
)以使用next
获取唯一值:
[next(iter(d.values())) for d in output]
同样,使用map
:
[*map(lambda d: next(iter(d.values())), output)]
我选择了这种方法而不是明显的[k["latitude"] for k in output]
,因为这可以通用的方式工作,即不必知道获取值列表的键的名称。
示例:强>
In [85]: output
Out[85]: [{'latitude': 28.6333}, {'latitude': 28.6333}, {'latitude': 28.65}]
In [86]: [next(iter(d.values())) for d in output]
Out[86]: [28.6333, 28.6333, 28.65]
In [87]: [*map(lambda d: next(iter(d.values())), output)]
Out[87]: [28.6333, 28.6333, 28.65]
答案 3 :(得分:1)
output
变量是一个列表,但请尝试以下操作:
# I assume Python 2.7
output = [{"latitude": 28.6333}, {"latitude": 28.6333}, {"latitude": 28.65}]
d = {}
for dic in output:
for k,v in dic.iteritems():
if k in d:
d[k].append(v)
else:
d[k] = [v]
print d
这将与原始字典中的多个键一起使用,并将所有键的一个字典作为所有相应值的列表。
可以使用defaultdict(list)
进行改进,以便可以将其重写为:
from collections import defaultdict
d = defaultdict(list)
for dic in output:
for k,v in dic.iteritems():
d[k].append(v)
print d
以上两者都将输出:
d = {"latitude": [28.6333, 28.6333, 28.65]}
因此,要获取每个键的列表,然后只需查找d ['latitude']并获得纬度列表。 (如果您有类似的数据集,也可以用于经度。)
答案 4 :(得分:1)
您可以通过以下代码
来实现此目的d=[]
for k in output:
d.append(k['latitude'])
答案 5 :(得分:0)
output
不是字典,因此iterkeys()
不适用。
以下代码应该可以解决问题(使用Python 3.6.1):
import collections
output = [{"latitude": 28.6333}, {"latitude": 28.6333}, {"latitude": 28.65}]
dic = collections.defaultdict(list)
for d in output:
for k, v in d.items():
dic[k].append(v)
print (dic)