我有两个变量:
documents = [
{'type': 'passport', 'number': '2207 876234', 'name': 'Smith'},
{'type': 'invoice', 'number': '11-2', 'name': 'Obama'},
{'type': 'insurance', 'number': '10006', 'name': 'Carpenter'}
]
directories = {'1': ['2207_876234', '11-2'], '2': ['10006'], '3': ['0']}
我必须编写一个代码才能以格式输出:№:2207 876234,类型:护照,所有者: Smith,书架编号:1№:11-2,类型:发票,船主:奥巴马,货架编号:1№:10006,类型:保险,所有者:木匠,货架编号:2
所以我已经写了一段代码
for k, v in directories.items():
for info in documents:
if v in [info]:
print(k([info['number']]))
这似乎不对。有经验的人能给我一个关于如何在一个输出格式中组合两个变量的想法吗?
发布于 2021-07-03 15:32:34
这不是最漂亮的,但很管用。
documents = [
{'type': 'passport', 'number': '2207 876234', 'name': 'Smith'},
{'type': 'invoice', 'number': '11-2', 'name': 'Obama'},
{'type': 'insurance', 'number': '10006', 'name': 'Carpenter'}
]
directories = {'1': ['2207_876234', '11-2'], '2': ['10006'], '3': ['0']}
entry_count = 0
out = []
for j,k in enumerate(directories):
v = directories[k]
for i,n in enumerate(directories[k]):
if n == '0':
break
data = documents[entry_count]
out.append({ 'No': n, 'type': data['type'], 'owner': data['name'], 'shelf number': j + 1 })
entry_count += 1
print(out)
输出:
[{'no': '2207_876234', 'type': 'passport', 'owner': 'Smith', 'shelf number': 1},
{'no': '11-2', 'type': 'invoice', 'owner': 'Obama', 'shelf number': 1},
{'no': '10006', 'type': 'insurance', 'owner': 'Carpenter', 'shelf number': 2}]
在对此进行了思考之后,我突然想到,虽然您的documents
和directories
的number
值在示例数据中的顺序相同,但是如果它们的顺序发生变化,上面的方法就不会继续运行。
但是,directories['1']
中的第一个值与documents
- '2207 876234' =/= '2207_876234'
中的第一个数字不匹配。
如果我们将documents
中的数字更改为与directories
中的数字匹配,则以下代码工作正常,尽管速度较慢,但无论对象的顺序如何,都要确保数字值匹配:
documents = [
{'type': 'passport', 'number': '2207_876234', 'name': 'Smith'},
{'type': 'invoice', 'number': '11-2', 'name': 'Obama'},
{'type': 'insurance', 'number': '10006', 'name': 'Carpenter'}
]
directories = {'1': ['2207_876234', '11-2'], '2': ['10006'], '3': ['0']}
out = []
for j,k in enumerate(directories):
v = directories[k]
for i,n in enumerate(directories[k]):
data = next((d for d in documents if n == d['number']), None)
if not data:
continue
out.append({ 'No': n, 'type': data['type'], 'owner': data['name'], 'shelf number': j + 1 })
print(out)
输出:
[{'No': '2207_876234', 'type': 'passport', 'owner': 'Smith', 'shelf number': 1},
{'No': '11-2', 'type': 'invoice', 'owner': 'Obama', 'shelf number': 1},
{'No': '10006', 'type': 'insurance', 'owner': 'Carpenter', 'shelf number': 2}]
注意,输出是相同的,但是如果documents
被重新排序,第一个方法将无法工作。
发布于 2021-07-03 15:24:05
以下是一个解决方案:
通过以下方式匹配值:
l=[]
for i in directories.values():
for k in i:
for y in documents:
if y['number']==k:
y['shelf number']=k
l.append(y)
更改关键名称:
res=[]
for i in l:
i['No']=i.pop('number')
i['owner']=i.pop('name')
res.append(i)
print(res)
输出:
[{'type': 'invoice', 'shelf number': '11-2', 'No': '11-2', 'owner': 'Obama'}, {'type': 'insurance', 'shelf number': '10006', 'No': '10006', 'owner': 'Carpenter'}]
https://stackoverflow.com/questions/68237268
复制相似问题