Dan*_*rke 4 python arrays json dictionary list-comprehension
我想将散布值列表转换为字典数组.
我正在尝试在Python中创建一个能够与JSON API一起使用的预测值列表.一旦我有了字典,我就会使用json.dumps它.
my_list = [35, 2.75, 67, 3.45] # in form of: (value, score, value, score)
Run Code Online (Sandbox Code Playgroud)
理想的结果:
my_array_of_dicts = [{'value':35, 'score':2.75}, {'value':67 'score':3.45}]
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的.
第一次尝试:
d = dict(zip(my_list[::2], my_list[1::2]))
Run Code Online (Sandbox Code Playgroud)
它产生......
> {35: 2.75,
67: 3.45}
Run Code Online (Sandbox Code Playgroud)
我不知道如何获得自定义键.或者将每对作为自己的字典.
第二次尝试:
[{'value':i, 'score':i} for i in my_list]]
> [{'value':35, 'score':35}, {'value':2.75, 'score':2.75},
{'value':67, 'score':67}, {'value':3.45, 'score':3.45}]
Run Code Online (Sandbox Code Playgroud)
它很接近,但并没有考虑每一秒的分数值.
你真的很接近这个zip版本.您只需要创建对象并指定键.
my_list = [35, 2.75, 67, 3.45]
[{'value': v, 'score': s} for v, s in zip(my_list[::2], my_list[1::2])]
Run Code Online (Sandbox Code Playgroud)
结果:
[{'value': 35, 'score': 2.75}, {'value': 67, 'score': 3.45}]
Run Code Online (Sandbox Code Playgroud)
使用理解式的一行:
[{'value': k, 'score': v} for k, v in [my_list[i: i + 2] for i in range(0, len(my_list), 2)]]
[{'score': 2.75, 'value': 35}, {'score': 3.45, 'value': 67}]
Run Code Online (Sandbox Code Playgroud)
使用您最初的尝试:
[{'value': k, 'score': v} for k,v in zip(my_list[::2], my_list[1::2])]
Run Code Online (Sandbox Code Playgroud)
另一种更详细的方式
from operator import itemgetter
getters = [itemgetter(slice(i, i + 2)) for i in range(0, len(my_list), 2)]
vals = [g(my_list) for g in getters]
def score_vals(s):
k, v = s
return {'value': k, 'score': v}
list(map(score_vals, vals))
Run Code Online (Sandbox Code Playgroud)