如何使用现有的一维列表进行哈希生成二维列表?

时间:2019-03-03 17:21:44

标签: python list hashmap

我有一个整数列表,例如:[10, 20, 50, 30],我想在另一个列表中计算这些整数的出现。
例如,如果第一个列表中的10在第二个列表中出现两次,其余整数仅出现一次,则输出必须为:[[10:2], [20:1], [50:1], [30:]]

我尝试使用以下代码,但出现错误:AttributeError: 'int' object has no attribute 'extend'。我在做什么错了?

for i in range(0,len(s)):
    s[i].append([])
    for j in range(0,len(ar)):
        if s[i]==ar[j]:
            s[i][0]+=1

我正在尝试实现某种哈希映射,请分享您可能拥有的任何更好的方法。谢谢!

2 个答案:

答案 0 :(得分:1)

Counter对象非常适合该任务。

from collections import Counter

wanted = [10, 20, 50, 30]

other_list = [10, 20, 10, 40, 60, 50, 100, 70]

wanted_set = frozenset(wanted)
counts = Counter([number for number in other_list if number in wanted_set])

print(counts)

# Access the count for every number.
for number in counts:
    print('{0}: {1}'.format(number, counts[number]))

答案 1 :(得分:-1)

您可以在Python中同时使用两种Dictionary理解:

s = [10, 20, 50, 30]
{curr: s.count(curr) for curr in s}
Out[0]: {10: 1, 20: 1, 50: 1, 30: 1}

您还可以像这样使用Python集合计数器:

from collections import Counter
Counter(s)
Out[0]: Counter({10: 1, 20: 1, 50: 1, 30: 1})

参考文献:

  • Python中的列表和字典理解-here
  • 计数器对象文档-here

祝你好运!