簡體   English   中英

從字典列表中獲取鍵值

[英]Getting key values from a list of dictionaries

我有一個包含字母和頻率字典的列表。 基本上,我每個字母表(小寫和大寫)和空格都有53個字典。

adict = {'Letter':'a', 'Frequency':0}
bdict = {'Letter':'b', 'Frequency':0}
cdict = {'Letter':'c', 'Frequency':0}

如果您輸入一個單詞,它將掃描該單詞並更新其相應字母的頻率。

for ex in range(0, len(temp)):
    if temp[count] == 'a': adict['Frequency']+=1
    elif temp[count] == 'b': bdict['Frequency']+=1
    elif temp[count] == 'c': cdict['Frequency']+=1

例如,我輸入單詞“Hello”,檢測字母H,e,l,l,o並更新其頻率。 非零頻率將被轉移到新列表。

if adict['Frequency'] != 0 : newArr.append(adict) 
if bdict['Frequency'] != 0 : newArr.append(bdict)
if cdict['Frequency'] != 0 : newArr.append(cdict) 

在此之后,我將newArr按頻率排序並轉移到名為finalArr的新列表。 以下是單詞“Hello”的示例列表內容

{'Letter': 'H', 'Frequency': 1}
{'Letter': 'e', 'Frequency': 1}
{'Letter': 'o', 'Frequency': 1}
{'Letter': 'l', 'Frequency': 2}

現在我想要的是只將鍵值傳遞給2個單獨的列表; letterArr和numArr。 我該怎么做呢? 我想要的輸出是:

letterArr = [H,e,o,l]
numArr = [1,1,1,2]

你為什么不只是使用collections.Countercollections.Counter 例如:

from collections import Counter
from operator import itemgetter

word = input('Enter a word: ')
c = Counter(word)

letter_arr, num_arr = zip(*sorted(c.items(), key=itemgetter(1,0)))
print(letter_arr)
print(num_arr)

注意使用sorted()來增加頻率進行排序。 itemgetter()用於反轉排序順序,以便首先在頻率上執行排序,然后在字母上執行排序。 然后使用解壓縮列表上的zip()分隔排序的頻率。

演示

Enter a word: Hello
('H', 'e', 'o', 'l')
(1, 1, 1, 2)

結果是元組,但如果需要,可以使用list(letter_arr)list(num_arr)轉換為列表。

我很難理解這個問題的數據結構選擇。 你為什么不跟這樣的字典一起去:

frequencies = { 'H': 1, 'e': 1, 'l': 2, 'o': 1 }

使用計數器更容易實現:

from collections import Counter
frequencies = Counter("Hello")
print(frequencies)
>>> Counter({ 'H': 1, 'e': 1, 'l': 2, 'o': 1 })

然后要添加另一個單詞,您只需使用update方法:

frequencies.update("How")
print(frequencies)
>>> Counter({'l': 2, 'H': 2, 'o': 2, 'w': 1, 'e': 1})

最后,要獲得2個陣列,您可以:

letterArr, numArr = zip(*frequencies.items())

這會給你元組,如果你真的需要列表,只需: list(letterArr)

你想要一個簡單的答案而不需要像zip,集合,項目等那樣進一步完成。這樣就完成了它的最小化,循環中有3行。

finalArr= [{'Letter': 'H', 'Frequency': 1},
           {'Letter': 'e', 'Frequency': 1},
           {'Letter': 'o', 'Frequency': 1},
           {'Letter': 'l', 'Frequency': 2}]

letterArr = []
numArr    = []
for i in range(len(finalArr)):
    letterArr.append(finalArr[i]['Letter'])
    numArr.append(finalArr[i]['Frequency'])
print letterArr
print numArr

輸出是

['H', 'e', 'o', 'l']
[1, 1, 1, 2]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM