sun*_*eet 0 python arrays dictionary
所以我有这个results包含对象列表的变量.所以我写这段代码
entry = {}
temp = []
temp2 = []
for result in results:
entry['value'] = result['fb_id']
entry['label'] = result['full_name']
temp.append(entry)
temp2.append(result)
print (result)
print (entry)
print temp
print temp2
Run Code Online (Sandbox Code Playgroud)
这打印
{'fb_id': 17500787L, 'full_name': u'Sandipan Mondal'} #this is result1
{'value': 17500787L, 'label': u'Sandipan Mondal'} #this is entry1
{'fb_id': 597333664L, 'full_name': u'Aakash Tulsani'} #this is result2
{'value': 597333664L, 'label': u'Aakash Tulsani'} #this is entry2
[{'value': 597333664L, 'label': u'Aakash Tulsani'}, #this is temp
{'value': 597333664L, 'label': u'Aakash Tulsani'}]
[{'fb_id': 17500787L, 'full_name': u'Sandipan Mondal'}, #this is temp2
{'fb_id': 597333664L, 'full_name': u'Aakash Tulsani'}
Run Code Online (Sandbox Code Playgroud)
现在temp2变量出现了预期,[result1, result2]但是temp变量并没有发生.它正在重复entry2
那是因为你entry在每次迭代时都会覆盖内容.这意味着您将列表中的引用列表保存temp到同一个字典中entry,并一遍又一遍地附加该字典.在每次迭代时重置字典:
for result in results:
entry = {}
entry['value'] = result['fb_id']
entry['label'] = result['full_name']
temp.append(entry)
temp2.append(result)
print (result)
print (entry)
Run Code Online (Sandbox Code Playgroud)
你完全不需要temp2,因为你已经在results你正在迭代的列表中得到了你的结果.所以就这样使用它.对于转换后的条目,如果您持有转换的键映射,则可以执行以下操作:
>>> m = {'fb_id': 'value', 'full_name': 'label'}
>>> [{m[k]: v for k, v in result.iteritems()} for result in results]
[{'label': u'Sandipan Mondal', 'value': 17500787L},
{'label': u'Aakash Tulsani', 'value': 597333664L}]
Run Code Online (Sandbox Code Playgroud)
这使用列表和字典理解来迭代结果中的每个字典,并从转换字典中获取每个键和值对的正确键m.