如何计算字典中值的数字

时间:2014-11-23 10:25:16

标签: python dictionary numbers

我正在尝试计算包含显示在字典条目值中的数字的值的数量,然后将它们放在列表中。例如:

some_dictionary = {'FIRST' : ['a', '1', 'b', '2'], 
                   'SECOND' : ['c', 'd', '3', 'e'], 
                   'THIRD' : ['4', '5', 'f', 'g6']}

some_dictionary_values = [2, 1, 3]

到目前为止,我有:

for key, value in some_dictionary.items():
    for string in value:
        if any(char.isdigit() for char in string):
            amount_of_numbers.append(string)

但这似乎是一种非常迂回的方式。我想知道我是否走在正确的轨道上,或者是否有更简单的方法来解决这个问题。

编辑:我想我的问题不是很清楚。让我举另一个例子:

dictionary = {'ONE' : ['abc', '123', 'def']
              'TWO' : ['happy', '42', 't4']
              'THREE' : ['word2', 'word', 'words']}

所以键'ONE'的值为'abc','123'和'def'。在这些值中,只有一个包含数字,因此在列表中这将显示为1。 键'TWO'有两个值,包含数字'42'和't4'。 键'THREE'有一个值,其中包含一个数字'word2'。

因此最终名单将是:

final_list = [1, 2, 1]

我希望这会让我的问题更清楚。

2 个答案:

答案 0 :(得分:0)

已编辑的答案

amount_of_numbers = {}
for key, value in some_dictionary.items():
    amount_of_numbers[key] = len ([string for string in value if all(char.isdigit() for char in string) ])
print amount_of_numbers
{'SECOND': 1, 'THIRD': 2, 'FIRST': 2}

原始答案

你走了:

some_dictionary = {'FIRST' : ['a', '1', 'b', '2'], 
                   'SECOND' : ['c', 'd', '3', 'e'], 
                   'THIRD' : ['4', '5', 'f', 'g6']}

amount_of_numbers = []

for value in some_dictionary.values():
    amount_of_numbers += [string for string in value if all(char.isdigit() for char in string)]

print amount_of_numbers
['3', '4', '5', '1', '2']

请注意,您当前的实现不正确,它在输出中也包含g6,即使它不是数字

答案 1 :(得分:0)

这个单线程利用了这样一个事实:在算术表达式中,布尔表现为整数

{key: sum(any(c.isdigit() for c in word) for word in value) 
    for key, value in some_dictionary.iteritems()}