在python中创建字典列表

在python中创建字典列表,python,dictionary,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 exampl

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

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(',')))

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

为了保持相对简单,我将使用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'}]
你的问题应该是“如何装箱词典列表?”。这里有一些你想考虑的事情。

>>> 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'}

一行,只是为了好玩:

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]))
  • […对于所有示例中的s]
    对于列表中的每个元素:
  • s.split(',')[1://code>用逗号将其拆分,然后在第一个元素之后取每个元素
  • (…)表示
    中的x,并将其转换为元组列表
  • s[0],第一个字母的int(x)
    ,并将该元素转换为整数
  • zip(*[…])
    现在转换元组列表
  • 映射(dict,…)
    并将每一个都变成一本字典
也只是为了好玩,但重点是可理解性:

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,并使用“measurement”表示数据中的“columns”,即inut数据的同一“csv column”中的那些值

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

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

ld = list()
对于每次测量(假设所有行的列数相同):

从行中取出物体
l[0]
,例如“A”,并将相应列
l[col]
,例如“1”中测量值的数值
int()
,例如1,分配给物体。然后使用a将其合并到所需结果的下一行中。最后,
append()
dict
添加到结果列表
ld

    ld.append({ l[0] : int(l[col]) for l in ll })
没有泡沫的视图。使用打印json.dumps(ld,indent=4)
更方便地显示:

print ld

希望这有帮助。查找有关dict理解的更多信息,例如(本好书的Python3版本)。

您所需的输出词典不正确。请编辑您的帖子。为什么不在包含映射值的列表中使用一个键点呢?您可以使用包含词典的列表。但是你不能有一本只包含列表的字典。您需要字典中的键:值对。此外,您的输入严格来说是一个字符串列表。因此,首先使用
split
查找,将其转换为列表列表。我认为您将[]与{}混淆了。很好的解决方案,但是否有创建有序字典的方法?这里的结果是无序的;如果您想要一个有序的,只需从collections import OrderedDict中添加
,并使用它而不是
dict
。您能解释一下这个吗?
    ld.append({ l[0] : int(l[col]) for l in ll })
print ld