Python 将某个值在一个列表内的多个列表中重复多少次存储到dict
我试图获取列表中多个列表中的第一个值,并在字典/散列中存储多次重复的次数Python 将某个值在一个列表内的多个列表中重复多少次存储到dict,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我试图获取列表中多个列表中的第一个值,并在字典/散列中存储多次重复的次数 coordinates = [ ['bg1955', '47.6740° N', '122.1215° W'], ['bg1955', '47.6101° N', '122.2015° W'], ['bg1955', '47.6062° N', '122.3321° W'], ['sj1955', '37.3318° N', '122.0312° W']
coordinates = [
['bg1955', '47.6740° N', '122.1215° W'],
['bg1955', '47.6101° N', '122.2015° W'],
['bg1955', '47.6062° N', '122.3321° W'],
['sj1955', '37.3318° N', '122.0312° W']
]
当我尝试以下方法时:
my_dict = {row[0]:coordinates.count(row[0]) for row in coordinates}
my_dict
的值变为:
{'sj1955': 0, 'bg1955': 0}
而不是:
{'bg1955': 3}
如何在python3中获得上述内容?原始数据样本将在一个列表中包含20000多个列表,而不是上面列出的4个
编辑:
当我提到某些
时,我指的是每行中的特定位置,即第[0]行,而不仅仅是在字典中只返回1个结果。如果有多个不同的值重复出现,这将导致出现这种情况,因为我希望存储任何重复的值,假设sw1950出现在20个列表中,jb1994出现在393个列表中,则会是:
{'bg1955': 3, 'sw1950': 20, 'jb1994': 393}
您可以使用defaultdict:
from collections import defaultdict
d = defaultdict(int)
coordinates = [
['bg1955', '47.6740° N', '122.1215° W'],
['bg1955', '47.6101° N', '122.2015° W'],
['bg1955', '47.6062° N', '122.3321° W'],
['sj1955', '37.3318° N', '122.0312° W']
]
for i in coordinates:
d[i[0]] += 1
print dict(d)
输出:
{'sj1955': 1, 'bg1955': 3}
Counter({'bg1955': 3, 'sj1955': 1})
使用计数器:
new_vals = map(list, zip(*coordinates))
print Counter(new_vals[0])
您现有的方法不起作用的原因是您试图这样做:
>>> x = [[1, 1, 1]]
>>> x.count(1)
现在,您认为这将返回3
,因为1存在3次。然而,这是它的回报:
0
原因是这些元素位于嵌套列表中,.count()
不计算嵌套元素
将上述内容与此进行对比:
>>> x = [1, 1, 1]
>>> x.count(1)
3
这是有意义的,因为那些1
s不在嵌套列表中
一种解决方法是使用:
输出:
{'sj1955': 1, 'bg1955': 3}
Counter({'bg1955': 3, 'sj1955': 1})
现在,你可以自由地根据你喜欢的任何一个项目的数量来投票。如果要提取重复项,可以执行以下操作:
print({ k : count[k] for k in count if count[k] > 1})
这将打印{'bg1955':3}
使用:
如果只想获得重复的密钥计数,请在创建计数器后对其进行过滤
>>> counts = Counter(c[0] for c in coordinates)
>>> {key: value for key, value in counts.items() if value > 1}
{'bg1955': 3}
你想要
{'bg1955':3,'sj1955':1}
?@falsetru只是{'bg1955':3}
,因为我在列表中会有20000多个列表。我只希望字典中存储的重复计数大于1@DanielPlasRivera我已经编辑了我的答案,包括如何做到这一点。请看一看,让我知道它是否有帮助。哈哈。我正要用计数器粘贴这张照片+1@idjaw我很感激你选择了对其他人的答案进行投票,而不是发布没有附加价值的相同内容。把我的帽子给你。