2014-11-23 93 views
0

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

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']} 

所以关键“一”的值有“ABC”,“123”和“高清”。在这些值中,只有其中一个包含数字,因此在列表中将显示为1. “TWO”键具有包含数字'42'和't4'的两个值。 'THREE'键有一个值,其中包含一个数字'word2'。

因此最终名单将是:

final_list = [1, 2, 1] 

我希望做我的问题更加清晰。

+3

如果我理解正确的话,在每件商品的输出列表对应于一个字典条目?如果是这样,这是有问题的,因为字典是无序的,所以你不知道哪个列表项对应于哪个字典条目。 – interjay 2014-11-23 10:33:29

+0

有没有办法将它们引用到字符串中?例如:string ='今天很好。'然后让字符串中的每个单词成为字典中的不同关键字? – learningpython 2014-11-23 10:38:26

回答

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也在输出,即使它不是一个数字

+0

好吧,我想我不明白我在问什么。我的意思是最后的列表是一个数字出现在密钥值的次数。 – learningpython 2014-11-23 10:33:12

+0

@learningpython检查编辑。由于正常字典没有按键顺序,所以我认为字典作为输出更合适。 – 2014-11-23 10:38:35

+0

不,我想包含'g6',因为它包含一个数字。 – learningpython 2014-11-23 10:40:19

0

这一个班轮利用的事实是,在算术表达式布尔表现为整数

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