将汽车名称的值添加到字典中

2024-04-29 19:05:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从文本文件中创建字典,其中的键都是字母from、、A“to、、Z”(或26个键)。为了做到这一点,我写了以下几行代码:

# Write file
f= open("Test.txt","w+")
f.write("Chevrolet chevelle malibu, Buick skylark 320, Plymouth satellite, amc Rebel sst, Ford torino,  Ford galaxie 500, Chevrolet Impala, Plymouth fury III,     
  Pontiac catalina, amc Ambassador dpl, Dodge Challenger se, Plymouth 'cuda 340, Chevrolet Monte Carlo")


# Open the file in read mode 
text = open("Test.txt", "r") 


import string
list(string.ascii_lowercase[0:10])

# Making keys
alphabet = string.ascii_lowercase[:13]

d_alphabet = list(string.ascii_lowercase[0:26] ) 
print(d_alphabet)

所以下一步应该是增加每个键的值。每个值都应该是一个列表,汽车名称以各自的字母开头(例如,如果汽车名称以小写字母而不是大写字母开头,也可以将其包含在字典中大写字母a下)

有人能帮我解决这个问题吗


Tags: testtxtstring字典字母asciiopenlist
3条回答
import string

car_dict = {k: [] for k in string.ascii_lowercase[0:26]}
with open('Test.txt', 'r') as f:
    for line in f:
        for car in map(str.strip, line.split(',')):
            car_dict[car[0].lower()].append(car)

结果如下:

{'a': ['amc Rebel sst', 'amc Ambassador dpl'], 'b': ['Buick skylark 320'], 'c': ['Chevrolet chevelle malibu', 'Chevrolet Impala', 'Chevrolet Monte Carlo'], 'd': ['Dodge Challenger se'], 'e': [], 'f': ['Ford torino', 'Ford galaxie 500'], 'g': [], 'h': [], 'i': [], 'j': [], 'k': [], 'l': [], 'm': [], 'n': [], 'o': [], 'p': ['Plymouth satellite', 'Plymouth fury III', 'Pontiac catalina', "Plymouth 'cuda 340"], 'q': [], 'r': [], 's': [], 't': [], 'u': [], 'v': [], 'w': [], 'x': [], 'y': [], 'z': []}

如果您想要一本只包含字母且至少有一个相关car的词典:

car_dict = {}
with open('Test.txt', 'r') as f:
    for line in f:
        for car in map(str.strip, line.split(',')):
            car_dict.setdefault(car[0].lower(), []).append(car)
{'c': ['Chevrolet chevelle malibu', 'Chevrolet Impala', 'Chevrolet Monte Carlo'], 'b': ['Buick skylark 320'], 'p': ['Plymouth satellite', 'Plymouth fury III', 'Pontiac catalina', "Plymouth 'cuda 340"], 'a': ['amc Rebel sst', 'amc Ambassador dpl'], 'f': ['Ford torino', 'Ford galaxie 500'], 'd': ['Dodge Challenger se']}

您可以使用defaultdict在执行过程中直接更新:

from collections import defaultdict

text = open("Test.txt", "r") 

res = defaultdict(list)
for line in text: # iterate over lines if there are multiple lines in the files
    cars = line.split(',')
    for car in cars:
        car = car.strip()
        letter = car[0].lower()
        res[letter].append(car)

text.close()

print(res)

输出:

defaultdict(<class 'list'>, {'c': ['Chevrolet chevelle malibu', 'Chevrolet Impala', 'Chevrolet Monte Carlo'], 'b': ['Buick skylark 320'], 'p': ['Plymouth satellite', 'Plymouth fury III', 'Pontiac catalina', "Plymouth 'cuda 340"], 'a': ['amc Rebel sst', 'amc Ambassador dpl'], 'f': ['Ford torino', 'Ford galaxie 500'], 'd': ['Dodge Challenger se']})

我已修改了您的代码,使其能够正常工作,并使用大写字母:

from string import ascii_uppercase


f= open("Test.txt","w+")
f.write("Chevrolet chevelle malibu, Buick skylark 320, Plymouth satellite, amc Rebel sst, Ford torino,  Ford galaxie 500, Chevrolet Impala, Plymouth fury III,"
  "Pontiac catalina, amc Ambassador dpl, Dodge Challenger se, Plymouth 'cuda 340, Chevrolet Monte Carlo")
f.close()  # close it so you can open it again


text = open("Test.txt", "r")
cars = [(car[0].upper(), car) for car in text.read().split(", ")]  # List of tuples with car letter and car name
car_list = []
car_dict = {}
for char in ascii_uppercase:
    for i, car in cars:
        if i == char:
            car_list.append(car)
    if car_list:  # adds cars to dictionary if cars with that first letter exist
        car_dict[char] = car_list
        car_list = []  # clear car list to start again
print(car_dict)

相关问题 更多 >