Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Dictionary:当键是元组时,追加到list的值_Python_Json_Dictionary_Key - Fatal编程技术网

Python Dictionary:当键是元组时,追加到list的值

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

我试图将值附加到一个列表中,其中键是一个元组。但我一直得到keyrerror,因为python中的字典不能访问元组作为键

注:我想做的是:

  • 我有一个json文件。我正在尝试按n项分组,这将是我的字典密钥。然后,我将为tuple的键返回相应的字典列表
  • 我试着在函数中这样做
  • 请在下面找到我的示例代码:

    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这有意义现在您显示输出,这不是一个组操作,我将显示给您