有没有把字典放进字典的功能?

2024-06-28 20:16:43 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我想打开字典并更改字典键。我试过使用zip,但它不是我想要的工作

这是我掌握的数据

data= [{'id': 'abc001',
       'demo': [{'Answer': '1', 'QID': 'AB001'},
                {'Answer': '6', 'QID': 'AB023'},
                {'Answer': '3', 'QID': 'AB004'},
                {'Answer': '3', 'QID': 'AB006'}]},
      {'id': 'abc002',
       'demo': [{'Answer': '1', 'QID': 'AB001'},
                {'Answer': '6', 'QID': 'AB002'},
                {'Answer': '3', 'QID': 'AB003'},
                {'Answer': '3', 'QID': 'AB006'}]},
      {'id': 'abc003',
       'demo': [{'Answer': '1', 'QID': 'AB001'},
                {'Answer': '6', 'QID': 'AB002'},
                {'Answer': '3', 'QID': 'AB004'},
                {'Answer': '3', 'QID': 'AB005'}]}]

我想将QID更改为另一个名称,但有些响应具有此QID,而另一个响应具有其他QID,如数据中所示

这是QID需要更改的名称:

QID 
AB001-gender
AB002-edu
AB003-qual
AB004-area
AB005-sal
AB006-living
AB023-job

因此,这是我需要的输出: 词典仅在演示中提供

Output=[{'id': 'abc001'
        'demo':{'gender':'1',
               'job':'6',
               'area':'3',
               'study':'3'}},
       {'id': 'abc002'
        'demo':{'gender':'1',
               'edu':'6',
               'qual':'3',
               'living':'3'}},
       {'id': 'abc003'
        'demo':{'gender':'1',
               'edu':'6',
               'area':'3',
               'sal':'3'}}]

Tags: 数据answerid字典demoareagenderedu
3条回答

您可以这样做:

mod_data = []
for demo in data:
    mod_demo = {'id': demo['id'], 'demo': {}}
    for answer in demo['demo']:
        key = mapping[answer['QID']]
        mod_demo['demo'][key] = answer['Answer']

    mod_data.append(mod_demo)

print(mod_data)
>>> [
    {'id': 'abc001', 'demo': {'gender': '1', 'job': '6', 'area': '3', 'living': '3'}},
    {'id': 'abc002', 'demo': {'gender': '1', 'edu': '6', 'qual': '3', 'living': '3'}},
    {'id': 'abc003', 'demo': {'gender': '1', 'edu': '6', 'area': '3', 'sal': '3'}}
]

我没有费心去测试它。。。所以它可能无法开箱即用

s= """AB001-gender
AB002-edu
AB003-qual
AB004-area
AB005-sal
AB006-living
AB023-job"""
# create a lookup table
id2name = dict(line.split("-",1) for line in s.splitlines())



data= [{'id': 'abc001',
       'demo': [{'Answer': '1', 'QID': 'AB001'},
                {'Answer': '6', 'QID': 'AB023'},
                {'Answer': '3', 'QID': 'AB004'},
                {'Answer': '3', 'QID': 'AB006'}]},
      {'id': 'abc002',
       'demo': [{'Answer': '1', 'QID': 'AB001'},
                {'Answer': '6', 'QID': 'AB002'},
                {'Answer': '3', 'QID': 'AB003'},
                {'Answer': '3', 'QID': 'AB006'}]},
      {'id': 'abc003',
       'demo': [{'Answer': '1', 'QID': 'AB001'},
                {'Answer': '6', 'QID': 'AB002'},
                {'Answer': '3', 'QID': 'AB004'},
                {'Answer': '3', 'QID': 'AB005'}]}]
def lookup_dict_data(d):
    # look up the id in our other dict we created earlier
    return id2name.get(d['QID'],d['QID']), d['Answer'])

for adict in data: # edit existing dict i guess
    adict['demo'] = dict(lookup_dict_data(d) for d in adict['demo'])

我试过用这个

data= [{'id': 'abc001',
       'demo': [{'Answer': '1', 'QID': 'AB001'},
                {'Answer': '6', 'QID': 'AB023'},
                {'Answer': '3', 'QID': 'AB004'},
                {'Answer': '3', 'QID': 'AB006'}]},
      {'id': 'abc002',
       'demo': [{'Answer': '1', 'QID': 'AB001'},
                {'Answer': '6', 'QID': 'AB002'},
                {'Answer': '3', 'QID': 'AB003'},
                {'Answer': '3', 'QID': 'AB006'}]},
      {'id': 'abc003',
       'demo': [{'Answer': '1', 'QID': 'AB001'},
                {'Answer': '6', 'QID': 'AB002'},
                {'Answer': '3', 'QID': 'AB004'},
                {'Answer': '3', 'QID': 'AB005'}]}]

id_to_key = {
  'AB001': 'gender',
  'AB002': 'edu',
  'AB003': 'qual',
  'AB004': 'area',
  'AB005': 'sal',
  'AB006': 'living',
  'AB023': 'job'
}
import pprint

result = []
for item in data:
  d = {'id': item['id']}
  dd = {}
  for question in item['demo']:
    dd[id_to_key[question['QID']]] = question['Answer']
  d['demo'] = dd
  result.append(d)
pprint.pprint(result)

相关问题 更多 >