Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 试图将字典中的列表展平为键值_Python_Python 3.x - Fatal编程技术网

Python 试图将字典中的列表展平为键值

Python 试图将字典中的列表展平为键值,python,python-3.x,Python,Python 3.x,尝试从Json中展平别名键 { "name": "Rocky Marci", "aliases": ["Rocky", "Champ"], "physical": { "height_in": 67, "weight_lb": 150 }, "Fights": 49 } 喜欢下面这个 { "name": "Rocky Marci", "aliases.0": "Rocky", "aliases.1"

尝试从Json中展平别名键

{
    "name": "Rocky Marci",
    "aliases": ["Rocky", "Champ"],
    "physical": {
        "height_in": 67,
        "weight_lb": 150
    },
    "Fights": 49
}
喜欢下面这个

{
    "name": "Rocky Marci",
    "aliases.0": "Rocky",
    "aliases.1": "Champ",
    "physical.height_in": 67,
    "physical.weight_lb": 150,
    "Fights": 49
}
我试过这个

def flatten(d, parent_key='', sep='_'):
    items = []
    for k, v in d.items():
        new_key = parent_key + sep + k if parent_key else k
        if isinstance(v, collections.MutableMapping):
            items.extend(flatten(v, new_key, sep=sep).items())
        else:
            items.append((new_key, v))
    return dict(items)

但这并不能使数组平坦化,因为列表不是collections.MutableMapping的实例。我建议查查

isinstance(v, (list, dict))
相反

更多的可能性是

您可以使用递归:

s = {
 "name": "Rocky Marci",
 "aliases": ["Rocky", "Champ"],
 "physical": {
    "height_in": 67,
    "weight_lb": 150
  },
  "Fights": 49
}
def flatten(d, last = ''):
   for a, b in d.items():
     if type(b) in [int, str]:
       yield ("{}.{}".format(a, last) if last else a, b)
     if isinstance(b, list):
       for i, c in enumerate(b):
         yield ("{}.{}".format(a, i), c)
     if isinstance(b, dict):
        for i in flatten(b, last = a):
           yield i

result = dict(list(flatten(s)))
输出:

{'aliases.0': 'Rocky', 'height_in.physical': 67, 'name': 'Rocky Marci', 'aliases.1': 'Champ', 'Fights': 49, 'weight_lb.physical': 150}

请显示您想要的输出以及您得到的结果。