Python - 来自未排序文本的字典,列表理解?
Python - Dictionary from unsorted text, list comprehension?
我希望更精通列表理解的人可以提供一些建议。
考虑以下数据集:
Onions,copper,manganese,magnesium,phosphorus
Tomatoes,copper,manganese,potassium
Garlic,manganese
Celery,manganese,potassium,sodium,salt
Bell Peppers,copper,manganese
Butter,sodium,salt
Eggplant,copper,manganese
Grapes,copper,manganese,potassium
我需要制定一个字典,其中键是矿物质,值是一组含有该矿物质的食物-像这样:
{'copper': {'Tomatoes', 'Onions', 'Bell Peppers', 'Eggplant'}, 'maganeese': {'Onions', 'Tomatoes', 'Garlic', 'Celery', 'Bell Peppers', 'Eggplant', 'Grapes'}... etc.}
您会注意到食物位于第一个位置,其次是它所含的矿物质。
我想我可能需要将食物和矿物质分成两个列表,食物列表和矿物质列表。从逻辑上讲,我完全不知道如何完成这项任务。
with open ('file.txt', 'r') as fp:
D = dict()
food_list = []
mineral_list = []
for line in fp:
line = line.strip().split(",")
line = [x for x in line if x]
food_list.append(line[0])
print(food_list)
有人可以在这里提供正确方向的推动吗?
你可以这样做:
import pprint
mineral_table = {}
with open("ip.txt") as infile:
for line in infile:
# split the line into vegetable and minerals
vegetable, *minerals = line.strip().split(',')
# for each mineral add the vegetable to the mineral list
for mineral in minerals:
mineral_table.setdefault(mineral, []).append(vegetable)
pprint.pprint(mineral_table)
输出
{'copper': ['Onions', 'Tomatoes', 'Bell Peppers'],
'magnesium': ['Onions'],
'manganese': ['Onions', 'Tomatoes', 'Garlic', 'Celery', 'Bell Peppers'],
'phosphorus': ['Onions'],
'potassium': ['Tomatoes', 'Celery'],
'salt': ['Celery'],
'sodium': ['Celery']}
行:
# split the line into vegetable and minerals
vegetable, *minerals = line.strip().split(',')
使用 extended iterable unpacking. The for loop uses setdefault,来自文档:
If key is in the dictionary, return its value. If not, insert key with
a value of default and return default. default defaults to None.
我希望更精通列表理解的人可以提供一些建议。
考虑以下数据集:
Onions,copper,manganese,magnesium,phosphorus
Tomatoes,copper,manganese,potassium
Garlic,manganese
Celery,manganese,potassium,sodium,salt
Bell Peppers,copper,manganese
Butter,sodium,salt
Eggplant,copper,manganese
Grapes,copper,manganese,potassium
我需要制定一个字典,其中键是矿物质,值是一组含有该矿物质的食物-像这样:
{'copper': {'Tomatoes', 'Onions', 'Bell Peppers', 'Eggplant'}, 'maganeese': {'Onions', 'Tomatoes', 'Garlic', 'Celery', 'Bell Peppers', 'Eggplant', 'Grapes'}... etc.}
您会注意到食物位于第一个位置,其次是它所含的矿物质。
我想我可能需要将食物和矿物质分成两个列表,食物列表和矿物质列表。从逻辑上讲,我完全不知道如何完成这项任务。
with open ('file.txt', 'r') as fp:
D = dict()
food_list = []
mineral_list = []
for line in fp:
line = line.strip().split(",")
line = [x for x in line if x]
food_list.append(line[0])
print(food_list)
有人可以在这里提供正确方向的推动吗?
你可以这样做:
import pprint
mineral_table = {}
with open("ip.txt") as infile:
for line in infile:
# split the line into vegetable and minerals
vegetable, *minerals = line.strip().split(',')
# for each mineral add the vegetable to the mineral list
for mineral in minerals:
mineral_table.setdefault(mineral, []).append(vegetable)
pprint.pprint(mineral_table)
输出
{'copper': ['Onions', 'Tomatoes', 'Bell Peppers'],
'magnesium': ['Onions'],
'manganese': ['Onions', 'Tomatoes', 'Garlic', 'Celery', 'Bell Peppers'],
'phosphorus': ['Onions'],
'potassium': ['Tomatoes', 'Celery'],
'salt': ['Celery'],
'sodium': ['Celery']}
行:
# split the line into vegetable and minerals
vegetable, *minerals = line.strip().split(',')
使用 extended iterable unpacking. The for loop uses setdefault,来自文档:
If key is in the dictionary, return its value. If not, insert key with a value of default and return default. default defaults to None.