【问题标题】:Check how many times a key of a tuple repeats itself in a dict?检查一个元组的键在字典中重复了多少次?
【发布时间】:2017-09-14 03:06:29
【问题描述】:

我有一本结构如下的字典:

{('key1','key2'): 50, ('key3','key4'): 70, ('key1','key5'): 90.....}

我想在我的字典中计算“key1”作为键元组中第一个单词出现的次数。

我开始编写下面提到的代码,但无法进一步思考:

  count = 0 
  leng = 0 
  i = 0 
  for key1,key2 in range(1,len(bigrams)):
      count = count +1 
      leng = leng + (bigrams.get((key1,key2),0))  
  print(count) 
  print(leng)

关于我应该如何进行的任何建议?

【问题讨论】:

  • 一种方式sum(1 for k in x if k[0]=='key1') 假设你的字典被称为x。虽然@robs 的方式似乎更简洁。

标签: python dictionary tuples


【解决方案1】:
from collections import defaultdict

der = {('key1','key2'): 50, ('key3','key4'): 70, ('key1','key5'): 90}

b = defaultdict(int)
for item, ler in der:
    b[item] += 1
print b         ## defaultdict(int, {'key1': 2, 'key3': 1})
print b['key1'] ## [2] 

Python tuple operations and count

【讨论】:

    【解决方案2】:

    我会使用 sum() 和生成器表达式来迭代键,依次测试每个键:

    bigrams = {('key1','key2'): 50, ('key3','key4'): 70, ('key1','key5'): 90}
    
    def number_of_times_key_appears_as_first_word(key, dictionary):
        return sum(k[0] == key for k in dictionary)
    
    assert number_of_times_key_appears_as_first_word('key1', bigrams) == 2
    assert number_of_times_key_appears_as_first_word('key3', bigrams) == 1
    assert number_of_times_key_appears_as_first_word('key2', bigrams) == 0
    

    【讨论】:

      【解决方案3】:

      你可以使用collections.Counter来统计key的每一部分,如下:

      from collections import Counter
      dic = {('key1','key2'): 50, ('key3','key4'): 70, ('key1','key5'): 90}
      keys_0 = Counter(key[0] for key in dic.keys())
      keys_1 = Counter(key[1] for key in dic.keys())
      
      # keys_0 = Counter({'key1': 2, 'key3': 1})
      # keys_1 = Counter({'key2': 1, 'key4': 1, 'key5': 1})
      

      如果需要,您可以使用dict(Counter(...)) 将转换计数器对象键入到字典中

      【讨论】:

        【解决方案4】:

        以下是所需的计数:

        dict1 = {('key1','key2'): 50, ('key3','key4'): 70, ('key1','key5'): 90, ('key3','key1'): 90}
        count = 0
        for keys in dict1.keys():
            if 'key1' in keys:
                if (keys[0] == 'key1'):
                    count = count + 1
        print count
        

        【讨论】:

          猜你喜欢
          • 2016-12-27
          • 2022-07-21
          • 2010-11-20
          • 2023-03-17
          • 1970-01-01
          • 2021-12-25
          • 2013-09-22
          • 2013-05-03
          相关资源
          最近更新 更多