从Python列表创建一个字典数组

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)

它很接近,但并没有考虑每一秒的分数值.

Mar*_*yer 6

你真的很接近这个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)


aws*_*ice 2

使用理解式的一行:

[{'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)