簡體   English   中英

將字典的值更改為列表

[英]change values of dictionary to be a list

好吧所以我有這個代碼,它將帶有一個帶有名字的文本文件,然后創建一個字典,每個名字的第一個字母作為鍵,並重復這個字母作為值。 我需要將其更改為值是與該首字母對應的名稱列表。 我到達了它計算每個字母有多少個名字的地方,但我不知道如何將這些名稱轉換成列表,成為價值觀。 它應該做這樣的事情:

(這是他的文本文件我的功能會讀)

Mary
Jane
Anna
Judith
Kim
Melody
Myriam
Lauren
Betty
Holley

然后字典應該這樣做

{'A':['Anna'], 'B':['Betty'], 'H':['Holley'], 'J':['Judith','Jane'], 'K': 
['Kim'], 'L':['Lauren'], 'M':['Mary','Melody','Myriam']}

但是我的回報是這樣的:

{'A':1, 'B':1, 'H':1, 'J':2, 'K':1, 'L':1, 'M':3}

如何將其更改為我獲取名稱的位置?

這是我的代碼:

def newDictionary():
    names={}
    char = []
    file = open(names)
    lines = file.readlines()
    for line in lines:
        1char = file.read(line[1])
        1char.append(char)
        for keys,values in names():

    return names

我將使用collections.defaultdict生成名稱列表:

from collections import defaultdict
def newDictionary(filename):
    names = defaultdict(list)
    with open(filename) as f:
        for line in f.readlines():
            line = line.strip()
            if line:
                names[line[0]].append(line)
    return names

如何通過第一個字母生成名稱列表字典的示例:

name_lists = newDictionary("names.txt")
print name_lists

defaultdict(,{'A':['Anna'],'B':['Betty'],'H':['Holley'],'K':['Kim'],'J':[' Jane','Judith'],'M':['Mary','Melody','Myriam'],'L':['Lauren']})

現在獲取每個首字母的計數:

counts = {k: len(v) for k, v in name_lists.items()}

{'A':1,'B':1,'H':1,'K':1,'J':2,'M':3,'L':1}

我改變了很多變量名,因為它們影響了內置函數。

這應該可以解決問題,只需將文件名從file.txt更改為您的文件名:

def newDictionary():
    names={}
    file = open('file.txt')
    lines = file.read().split('\n')
    if len(lines) == 1 and len(lines[0]) == 0:
        print('empty file')
    else:
        for line in lines:
            if line[0] in names:
                names[(line[0])].append(line)
            else:
                names[(line[0])] = [line,] 
    return names

基本上它所做的是讀取文件,分成行,然后遍歷行,檢查該行的第一個字符是否已經在字典中。 如果不是,請將其添加為鍵,其中值是包含名稱read的數組。 如果是,只需將名稱附加到與該鍵對應的數組中。

Obs:我改變了之前的答案,即將新行保留在名稱的末尾。

你可以使用setdefault

with open('yourfile.txt') as f:
    d = {}
    for line in f:
        lst = [(line[0], line.strip())]
        for k,v in lst:
            d.setdefault(k, []).append(v)
print (d)

輸出:

{'A': ['Anna'], 'B': ['Betty'], 'H': ['Holley'], 'K': ['Kim'], 'J': ['Jane', 'Judith'], 'M': ['Mary', 'Melody', 'Myriam'], 'L': ['Lauren']}

暫無
暫無

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

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