在python中创建一个字典列表

时间:2016-03-09 05:16:57

标签: python dictionary

我从文本文件中读到了以下数据集:

all_examples=   ['A,1,1', 'B,2,1', 'C,4,4', 'D,4,5']

我需要创建一个字典列表,如下所示:

lst = [ 
{"A":1, "B":2, "C":4, "D":4 },
{"A":1, "B":1, "C":4, "D":5 } 
]

我尝试使用生成器函数,但很难创建一个列表。

attributes = 'A,B,C'
def get_examples():

    for value in examples:
        yield dict(zip(attributes, value.strip().replace(" ", "").split(',')))

4 个答案:

答案 0 :(得分:7)

一个单行,只是为了好玩:

all_examples = ['A,1,1', 'B,2,1', 'C,4,4', 'D,4,5']

map(dict, zip(*[[(s[0], int(x)) for x in s.split(',')[1:]] for s in all_examples]))

产地:

[{'A': 1, 'C': 4, 'B': 2, 'D': 4}, 
 {'A': 1, 'C': 4, 'B': 1, 'D': 5}]

作为奖励,这也适用于更长的序列:

all_examples = ['A,1,1,1', 'B,2,1,2', 'C,4,4,3', 'D,4,5,6']

输出:

[{'A': 1, 'C': 4, 'B': 2, 'D': 4},
 {'A': 1, 'C': 4, 'B': 1, 'D': 5},
 {'A': 1, 'C': 3, 'B': 2, 'D': 6}]

说明:

map(dict, zip(*[[(s[0], int(x)) for x in s.split(',')[1:]] for s in all_examples]))
  • [... for s in all_examples]对于列表中的每个元素:
  • s.split(',')[1:]用逗号分隔,然后在第一个
  • 之后取出每个元素
  • (...) for x in并将其转换为元组列表
  • 第一个字母的
  • s[0], int(x),该元素转换为整数
  • zip(*[...])现在转置您的元组列表
  • map(dict, ...)并将每个变成字典!

答案 1 :(得分:3)

同样只是为了好玩,但重点是可理解性:

all_examples = ['A,1,1', 'B,2,1', 'C,4,4', 'D,4,5']
ll = [ x.split(",") for x in all_examples ]
ld = list()
for col in range(1, len(ll[0])):
    ld.append({ l[0] : int(l[col]) for l in ll })
print ld

将打印

[{'A': 1, 'C': 4, 'B': 2, 'D': 4}, {'A': 1, 'C': 4, 'B': 1, 'D': 5}]

只要输入为csv,整数和行长度相同,就可以正常工作。

解剖:我将使用teminology" thing"对于A,B和C以及"测量"对于"列"在数据中,即同一" csv-column"中的那些值。 inut数据。

将字符串输入数据放入每行的列表中:A,1,1 - > ["A","1","1"]

ll = [ x.split(",") for x in all_examples ]

结果应该是一个dicts列表,所以让我们初始化一个:

ld = list()

对于每个测量(假设所有行具有相同的列数):

for col in range(1, len(ll[0])):

拿东西l[0],例如" A",从该行并分配数值int(),例如在图1中,相应列l[col]中的测量值,例如, " 1",对此事。然后使用dictionary comprehension将其组合到所需结果的下一行。最后append() dict到结果列表ld

    ld.append({ l[0] : int(l[col]) for l in ll })

查看未消失的信息。使用print json.dumps(ld, indent=4)可以更方便地显示:

print ld

希望这会有所帮助。详细了解dict理解,例如here(这本伟大着作的Python3版本)。

答案 2 :(得分:1)

您实际上有一个字符串列表,并且您希望拥有从每个字符串的元组三元组中的相同键生成的成对字典列表。

为了保持这个相对简单,我将使用for循环而不是复杂的字典理解结构。

my_dictionary_list = list()
d1 = dict()
d2 = dict()
for triplet_str in all_examples:
    key, val1, val2 = triplet_str.split(',')
    d1[key] = val1
    d2[key] = val2
my_dictionary_list.append(d1)
my_dictionary_list.append(d2)

>>> my_dictionary_list
my_dictionary_list
[{'A': '1', 'B': '2', 'C': '4', 'D': '4'},
 {'A': '1', 'B': '1', 'C': '4', 'D': '5'}]

答案 3 :(得分:1)

您的问题应该是"如何创建词典列表?"。这是你想要考虑的事情。

>>> dict={}
>>> dict2={}
>>> new_list = []
>>> all_examples=['A,1,1', 'B,2,1', 'C,4,4', 'D,4,5']
>>> for k in all_examples:
...     ele=k.split(",")
...     dict[str(ele[0])]=ele[1]
...     dict[str(ele[0])]=ele[2]
...     new_list.append(dict)
...     new_list.append(dict2)
>>> dict
{'A': '1', 'C': '4', 'B': '2', 'D': '4'}
>>> dict2
{'A': '1', 'C': '4', 'B': '1', 'D': '5'}