Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将某个值在一个列表内的多个列表中重复多少次存储到dict_Python_Python 3.x_Dictionary - Fatal编程技术网

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我很感激你选择了对其他人的答案进行投票,而不是发布没有附加价值的相同内容。把我的帽子给你。