Python Dictionary:当键是元组时,追加到list的值
我试图将值附加到一个列表中,其中键是一个元组。但我一直得到keyrerror,因为python中的字典不能访问元组作为键 注:我想做的是:Python Dictionary:当键是元组时,追加到list的值,python,json,dictionary,key,Python,Json,Dictionary,Key,我试图将值附加到一个列表中,其中键是一个元组。但我一直得到keyrerror,因为python中的字典不能访问元组作为键 注:我想做的是: 我有一个json文件。我正在尝试按n项分组,这将是我的字典密钥。然后,我将为tuple的键返回相应的字典列表 我试着在函数中这样做 请在下面找到我的示例代码: def group_by_field(data, fields): if len(fields) > 1: groups = {fields: []} f
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对象脚本的样子:
[{'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}]
以下是示例输出的外观:
[{'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}]
错误是因为您试图使用keu
('bnf_name','bnf_code')
访问以下对象中的数据,而此元组键不存在
{'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}
您不能使用
字段
作为键,您希望每个对象的对应值都是键,因此对于每个键,获取值,并将其用作元组作为键:
def build_with_keys(values, fields):
if len(fields) > 1:
result = {}
for value in values:
key = tuple(value[k] for k in fields)
result[key] = value
return result
这里有很多问题:
- 当您尝试向
附加某些内容时,组[parameter[k]]
的值为k
,显然不在('bnf\u name','bnf\u code')
脚本的目录中
- 即使您解决了上一个问题,
也不会存在于参数[k]
组中
- 您正在迭代期间修改字典
,这是禁止的组
还有一个问题:如果python中的dictionary不能访问元组作为键,那么返回什么呢。提供一个给定的JSON与从JSON解码的数据混淆的频率,你确定
scripts
不仅仅是一个来自JSON文件的普通dict
?你能给出输入示例和预期输出吗?@DeepSpace我刚刚更新了问题,以显示脚本的样子。@azro我刚刚提供了ScriptsHanks@azro的输入示例供你回答。但我有一个问题要说明输出应该是什么样子。作为元组的键应该是json字典中的对应值。这对我来说很棘手。我希望这对您有意义。@toch_okafor这有意义现在您显示输出,这不是一个组操作,我将显示给您