การแปลงเป็นแฟ้ม csv จะ dict กับหลายค่า

0

คำถาม

ฉันมีแฟ้ม 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']}
csv dictionary pandas python
2021-11-23 20:37:07
3

คำตอบที่ดีที่สุด

1

คุณสามารถข้าม 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']}

หรือใช้ pandas:

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']}
2021-11-23 20:54:14
1

ถ้าคุณไม่ต้องการ Pandas,มันสำเร็จได้อย่างง่ายดายเพียงพอใช้เป็นภาษาไพธอนเป็นแฟ้ม 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']
2021-11-23 22:12:28
0

มีคนบริสุทธิ์เป็นภาษาไพธอน convtools องสมุดซึ่งหลายของข้อมูลการประมวลผล primitives และ fosters มีทางเลือกวิธี:

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']}]
2021-11-24 15:38:26

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่