如何将带有元组和字典的列表转换为python中的字典

时间:2017-02-03 12:07:56

标签: python

我有一个如下列表:

    [(u'profileDetails', {u'customerCategory': {u'masterCode': u'PRECAT1'},
 u'identificationDetails': {u'identificationDetail':
            [{u'idType': {u'masterCode': u'PASS'}}, 
            {u'idType': {u'masterCode': u'REGFORM'}}]}, 
u'customerSubCategory': {u'masterCode': u'PRESCAT1'}}), 
    (u'_id', u'58872e99321a0c8633291b3f')]

我想将其转换如下:

    {"profileDetails":{"customerCategory":{"masterCode":"PRECAT1"},
"identificationDetails":{"identificationDetail":
     [{"idType":{"masterCode":"PASS"}},
     {"idType":{"masterCode":"REGFORM"}}]},
"customerSubCategory":{"masterCode":"PRESCAT1"}},
"_id": "58872e99321a0c8633291b3f"}

我理解上面的结果包含元组,列表和字典以及unicode格式的所有数据。

我需要将unicode转换为字符串和元组并将列表转换为字典。我怎样才能在Python中实现这一目标?

2 个答案:

答案 0 :(得分:3)

使用词典理解:

In [2]: lst = [(u'profileDetails', {u'customerCategory': {u'masterCode': u'PRECAT1'}, u'identificationDetails': {u'identificationDetail': [{u'idType': {u'masterCode': u'PASS'}}, {u'idType': {u'masterCode': u'REGFORM'}}]}, u'customerSubCategory': {u'masterCode': u'PRESCAT1'}}), 
   ...: (u'_id', '58872e99321a0c8633291b3f')]

In [3]: {i: j for i, j in lst}
Out[3]: 
{'_id': '58872e99321a0c8633291b3f',
 'profileDetails': {'customerCategory': {'masterCode': 'PRECAT1'},
  'customerSubCategory': {'masterCode': 'PRESCAT1'},
  'identificationDetails': {'identificationDetail': [{'idType': {'masterCode': 'PASS'}},
    {'idType': {'masterCode': 'REGFORM'}}]}}}

请注意,因为我没有ObjectId,所以我用它的字符串参数替换它。

如果您的列表包含长度为1或大于2的元组,则可以使用try-except来处理ValueError

def dict_creator(my_list):
    for tup in my_list:
        try:
            key, value = tup
        except ValueError:
            # do what you want with tup
        else:
            yield key, value

final_dict = dict(dict_creator(my_list))

或者,如果你只是想忽略这些元组,你可以通过字典理解检查长度:

{tup[0]: tup[1] for tup in lst if len(tup) == 2}

如果你有一个元组字符串,你可以使用ast.literal_eval将字符串转换为元组对象。

答案 1 :(得分:1)

只需将元组列表类型转换为dict

>>> dict(my_list)

将返回:

{'_id': '58872e99321a0c8633291b3f', 
 'profileDetails': {
      'customerSubCategory': {'masterCode': 'PRESCAT1'}, 
      'identificationDetails': {'identificationDetail': [
          {'idType': {'masterCode': 'PASS'}}, 
          {'idType': {'masterCode': 'REGFORM'}}
      ]}, 
  'customerCategory': {'masterCode': 'PRECAT1'}}
 }

此处,my_list是问题中提到的元组列表。

[(x1, y1), (x2, y2)]形式的元组(或列表)列表被类型转换为dict时,python的解释器创建格式为{x1: y1, x2: y2}的dict对象,即所有元素元组的第0个索引变为 key ,索引1处的元素变为 value 到结果字典。