Alg*_*g_D 1 python dictionary list
我想创建一个具有以下输出的json输出:
[ {'data': [<val1>,<valn>], 'name': '<nameA>'},
{'data': [<val1>,<valn>], 'name': '<nameB>'} ]
Run Code Online (Sandbox Code Playgroud)
基本上,它采用由子列表形成的列表,并且对于每个子列表的第一个元素,值将附加到"名称",并且保留将在属性"数据"中形成单个列表.
下面的代码创建了所需的输出,但只有在项目列表中的每个子列表包含2个元素时才有效.
items= [['A', 30.0], ['B', 10.0], ['C', 9.28]]
print "ITEMS before==",items
items = [{"name":k, "data":[g]} for k,g in items]
print "ITEMS after==",items
Run Code Online (Sandbox Code Playgroud)
正确的ouptut: [{'data':[30.0],'name':'A'},{'data':[10.0],'name':'B'},{'data':[9.28],'名称':'C'}]
问题是当子列表有超过2个元素时,例如:
items= [['A', 1 ,30.0], ['B', 2, 10.0], ['C', 3, 9.28]]
Run Code Online (Sandbox Code Playgroud)
应该产生:
[{'data': [1,30.0], 'name': 'A'}, {'data': [2,10.0], 'name': 'B'}, {'data': [3,9.28], 'name': 'C'}]
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的东西:
items = [{"name":k, "data":[ x[1:] for x in g] } for k,g in items]
Run Code Online (Sandbox Code Playgroud)
但它会产生错误:ValueError:要解压缩的值太多
我怎样才能获得所需的输出?
试试这个:
[{'name': x[0], 'data': x[1:]} for x in my_list]
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Python 2.7或3.x,则可以使用理解来创建字典和列表.该[1:]切片为您提供了开始的第一个元素的列表.
您的问题是,您通过在不需要一个([x[1:] for x in g])的地方写一个理解来复制您创建列表的工作.切片已经返回一个列表,如果g不是列表,那么(如您所见)将失败.
因为x[1:]如果在双元素列表上调用将返回单元素列表,只要列表长度至少为两个并且第一个值始终为"名称"键,这将起作用.注意:
>>> my_list = [['A', 1 ,30.0], ['B', 2, 10.0], ['C', 3, 9.28]]
>>> [{'name': x[0], 'data': x[1:]} for x in my_list]
[{'data': [1, 30.0], 'name': 'A'}, {'data': [2, 10.0], 'name': 'B'}, {'data': [3, 9.28], 'name': 'C'}]
>>> my_list = [['A', 1 ,30.0], ['B', 2, 10.0], ['C', 3]]
>>> [{'name': x[0], 'data': x[1:]} for x in my_list]
[{'data': [1, 30.0], 'name': 'A'}, {'data': [2, 10.0], 'name': 'B'}, {'data': [3], 'name': 'C'}]
Run Code Online (Sandbox Code Playgroud)
如果您知道第一项始终是关键,那么此列表理解将完成工作:
new_dict = [{"name":k[0], "data":k[1:]} for k in items]
你得到"解压太多值"的原因是因为你有比你有变量更多的值.Python不知道将剩余的变量分配给g.如果items数组总是有每个子阵列三个要素,你可以创建一个非常具体的理解,像这样:new_dict = [{"name":k, "data":[g,d]} for k,g,d in items].但到目前为止,第一次理解是多才多艺的.
| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |