[英]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.