[英]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.