2014-11-23 66 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()}