我有一個 csv,加載時看起來像這樣。
chicken, meat
veal, meat
rice, carbs
potato, carbs
carrot, veggies
mushroom, veggies
apples, fruits
我想從中創建一個字典,所以我使用了代碼:
food = pd.read_csv('foods.csv', header=None, index_col=1, squeeze=False).to_dict()
當我列印字典時,每個鍵只顯示一個專案。相反,我希望所有人都這樣表現。
{'carbs':['potato','rice'],
'meat':['chicken','veal'],
'veggies':['mushroom','carrot'],
'fruits':['apples']}
uj5u.com熱心網友回復:
你可以跳過 Pandas 直接處理檔案。由于您實際上有一個兩個字符的分隔符,', '因此跳過 csv 也更容易:
di={}
with open('/tmp/fruit.csv') as f:
for x,y in (line.rstrip().split(', ') for line in f):
di.setdefault(y, []).append(x)
>>> di
{'meat': ['chicken', 'veal'], 'carbs': ['rice', 'potato'], 'veggies': ['carrot', 'mushroom'], 'fruits': ['apples']}
或者使用熊貓:
df=pd.read_csv('/tmp/fruit.csv', header=None, sep=', ', engine='python').groupby([1])[0].agg(list).to_dict()
>>> df
{'carbs': ['rice', 'potato'], 'fruits': ['apples'], 'meat': ['chicken', 'veal'], 'veggies': ['carrot', 'mushroom']}
uj5u.com熱心網友回復:
如果您不需要 Pandas,可以使用 Python 的 CSV 閱讀器輕松完成。
import csv
from collections import defaultdict
category_food_map = defaultdict(list)
with open('foods.csv', newline='') as f:
reader = csv.reader(f)
for row in reader:
food, category = row
category = category.strip()
category_food_map[category].append(food)
for category, food in category_food_map.items():
print(f'{category}: {food}')
我得到:
meat: ['chicken', 'veal']
carbs: ['rice', 'potato']
veggies: ['carrot', 'mushroom']
fruits: ['apples']
uj5u.com熱心網友回復:
有一個純 python convtools庫,它提供了大量的資料處理原語并促進了函式式方法:
from convtools import conversion as c
from convtools.contrib.tables import Table
# store converter for future reuse
converter = (
c.group_by(c.item(1))
.aggregate(
{
# use c.ReduceFuncs.ArrayDistinct(c.item(0)) if you need only
# unique values in lists
c.item(1): c.ReduceFuncs.Array(c.item(0)),
}
)
.gen_converter()
)
# stream reading and processing if needed
rows = Table.from_csv(
"tmp2.csv", dialect=Table.csv_dialect(skipinitialspace=True)
).into_iter_rows(list)
result = converter(rows)
assert result == [
{'meat': ['chicken', 'veal']},
{'carbs': ['rice', 'potato']},
{'veggies': ['carrot', 'mushroom']},
{'fruits': ['apples']}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/365286.html
