簡體   English   中英

來自csv數據的Python字典,其關鍵值是字典

[英]Python dictionary from csv data whose key values are dictionaries

我有一個包含以下數據的文件:

even;0;even;1;odd
odd;0;odd;1;even

我想創建一個字典,鍵是每行的第一個值,偶數和奇數,值是字典,其鍵值是整數,后面是偶數或奇數。 因此,如果我用此數據創建字典,它應該像這樣打印:

{'even': {'0': 'even', '1': 'odd'}, 'odd': {'0': 'odd', '1': 'even'}}

這是我的代碼:

def read_fa(file) -> dict:
d = {}
data = read_file_values(file)
for line in data:
    values = line.split(';')
    inner_values = values[1:]
    inner_value_inputs = []
    inner_value_states = []
    for iv in inner_values:
        try:
            type(eval(iv)) is int
            inner_value_inputs.append(iv)
        except:
            inner_value_states.append(iv)
    inner_value_tuples = list(zip(inner_value_inputs, inner_value_states))    
    d[values[0]] = ({t[0]: t[1]} for t in inner_value_tuples)
print(d)

我基本上已經讀取了“ read_file_lines()”函數,如果將內容放入列表中,它將打印:

['even;0;even;1;odd', 'odd;0;odd;1;even']

我的代碼得到的輸出是這樣的:

{'even': <generator object <genexpr> at 0x02927A30>, 'odd': <generator object <genexpr> at 0x02927AA8>}

我沒有得到第二個字典作為鍵,而是得到了這個生成器。 感謝您提供有關如何解決此問題的任何幫助,以及有關壓縮代碼以使其更緊湊的任何建議。

d[values[0]] = dict((t[0], t[1]) for t in inner_value_tuples)

要么

d[values[0]] = {t[0]: t[1] for t in inner_value_tuples}

您還可以使用itertools為您分割輸入。

import itertools as it

data = ['even;0;even;1;odd', 'odd;0;odd;1;even']

out = {}
for d in data:
    elems = d.split(';')
    key = elems[0]
    evens = it.islice(elems, 1, None, 2)
    odds = it.islice(elems, 2, None, 2)
    out[key] = {x: y for x, y in zip(evens, odds)}

print out

>>> {'even': {'1': 'odd', '0': 'even'}, 'odd': {'1': 'even', '0': 'odd'}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM