我试图将值附加到一个列表中,其中键是一个元组。但我一直得到keyrerror,因为python中的字典不能访问元组作为键
注:我想做的是:
请在下面找到我的示例代码:
def group_by_field(data, fields):
if len(fields) > 1:
groups = {fields: []}
for parameter in data:
for k, v in groups.items():
for i in fields:
if i in k:
groups[parameter[k]].append(parameter)
return groups
以下是我尝试实现该功能的示例:
group_by_field(scripts, ('bnf_name', 'bnf_code'))
其中scripts
是一个json文件
以下是json对象scripts
的外观:
[{'bnf_code': '0101010G0AAABAB',
'items': 2,
'practice': 'N81013',
'bnf_name': 'Co-Magaldrox_Susp 195mg/220mg/5ml S/F',
'nic': 5.98,
'act_cost': 5.56,
'quantity': 1000},
{'bnf_code': '0101021B0AAAHAH',
'items': 1,
'practice': 'N81013',
'bnf_name': 'Alginate_Raft-Forming Oral Susp S/F',
'nic': 1.95,
'act_cost': 1.82,
'quantity': 500}]
以下是示例输出的外观:
{('Co-Magaldrox_Susp 195mg/220mg/5ml S/F', '0101010G0AAABAB'): [{'bnf_code': '0101010G0AAABAB',
'items': 2,
'practice': 'N81013',
'bnf_name': 'Co-Magaldrox_Susp 195mg/220mg/5ml S/F',
'nic': 5.98,
'act_cost': 5.56,
'quantity': 1000}],
('Alginate_Raft-Forming Oral Susp S/F', '0101021B0AAAHAH'): [{'bnf_code': '0101021B0AAAHAH',
'items': 1,
'practice': 'N81013',
'bnf_name': 'Alginate_Raft-Forming Oral Susp S/F',
'nic': 1.95,
'act_cost': 1.82,
'quantity': 500}]
这里有很多问题:
groups[parameter[k]]
时,k
具有值('bnf_name', 'bnf_code')
,并且显然不在scripts
的目录中李>parameter[k]
也不会存在于groups
groups
,这是禁止的李>还有一个问题:如果
len(fields) <= 1
返回什么None
?一张空的口述?我建议您应该返回一个空的dict或提出一个错误试试这个:
从字段
('bnf_name', 'bnf_code')
:('Co-Magaldrox_Susp 195mg/220mg/5ml S/F', '0101010G0AAABAB')
。。。使用tuple
(可散列)。然后将当前dict附加到groups[key]
列表中。如果此列表尚不存在,则由setdefault
创建错误是因为您试图使用keu
('bnf_name', 'bnf_code')
来访问如下对象中的数据,而此元组键不存在您不能使用
fields
作为键,您希望每个对象的对应值都是键,因此对于每个键,获取值,并将其用作元组作为键:相关问题 更多 >
编程相关推荐