python / django使用变量作为dict键

时间:2018-03-31 08:31:44

标签: python django python-3.x

我正在使用python 3.6和Django 2.0。我有这样的字典/ json:

dict = [
    {'object A': '100'},
    {'object B': '101'},
    {'object C': '102'},
]

data = [
    {'title': 'object A', 'description': 'Some Text'},
    {'title': 'object B', 'description': 'Some Text'},
    {'title': 'object C', 'description': 'Some Text'},
]

然后尝试在另一个函数中访问该数字

output = []
for x in range(0, len(dict)):
    j = {
        'id': x,
        'title': data[x]['title'],
        'description': data[x]['description'],
        'value': dict[x][data[x]['title']],
    }
    output.append(j)

我遇到的问题是dict [x] []中的数据[x] [' title']是以字符串形式出现而不是切片。

我尝试在将标题放入之前将其拆分,我尝试手动添加'之前和之后。

我的第一个问题是,这可能吗?如果是这样,我将如何实现?

我的第二个问题是,是否有更好的方法来实现这一目标,可能使用.keys()或其他类似的东西?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果您的数据和字典列表可以保证具有一对一的映射关系,并且每个列表中的所有项目都是按键区分的,那么代码可以像以下一样进行优化,使用相关的排序键盘技巧:

def gen_output(my_dict_list, my_data_list):
    my_dict_list.sort(key=lambda x: next(iter(x.keys()), None))
    my_data_list.sort(key=lambda x: x['title'])

    output = [{
        'id': idx,
        'title': my_data_list['title'],
        'description': my_data_list['description'],
        'value': my_dict[my_data_list['title']],
    } for idx, (my_dict, my_data_list) in enumerate(zip(my_dict_list, my_data_list))]

    return output


if __name__ == "__main__":
    my_dict_list = [
        {'object A': '100'},
        {'object B': '101'},
        {'object C': '102'},
    ]

    my_data_list = [
        {'title': 'object B', 'description': 'Some Text'},
        {'title': 'object A', 'description': 'Some Text'},
        {'title': 'object C', 'description': 'Some Text'},
    ]
    print(gen_output(my_dict_list, my_data_list)

然后你可以得到这样的结果:

[{'description': 'Some Text', 'id': 0, 'title': 'object A', 'value': '100'},
 {'description': 'Some Text', 'id': 1, 'title': 'object B', 'value': '101'},
 {'description': 'Some Text', 'id': 2, 'title': 'object C', 'value': '102'}]