我正在尝试计算包含显示在字典条目值中的数字的值的数量,然后将它们放在列表中。例如:
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]
我希望这会让我的问题更清楚。
答案 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()}