Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 2.7 仅从嵌套字典中获取内部键_Python 2.7 - Fatal编程技术网

Python 2.7 仅从嵌套字典中获取内部键

Python 2.7 仅从嵌套字典中获取内部键,python-2.7,Python 2.7,我将json文件中的数据以这种形式保存 [ { "FIRST NAME": "Nasim", "EMAIL": "ac@iaculisnec.net", "ADDLINE1": "855-8805 Nunc. Avenue", "CITY": "Masterton", "LOCATION":{"ADDLINE2":"855-8805", "ADDLINE3":"Ave

我将json文件中的数据以这种形式保存

 [
    {
        "FIRST NAME": "Nasim",
        "EMAIL": "ac@iaculisnec.net",
        "ADDLINE1": "855-8805 Nunc. Avenue",
        "CITY": "Masterton",
        "LOCATION":{"ADDLINE2":"855-8805",
                    "ADDLINE3":"Avenue",
                    "PIN":"100",
                    "ZIP":{"AREA":"5645",
                           "STREET":"hgh",
                           "MAIN":"87"
                    }}
    },
    {
        "FIRST NAME": "Xanthus",
        "EMAIL": "adipiscing.elit@tinciduntcongue.edu",
        "ADDLINE1": "357-4583 Curae; St.",
        "CITY": "Basildon",
        "LOCATION":{"ADDLINE2":"357-4583",
                    "ADDLINE3":"Curae; St.",
                    "PIN":"101",
                    "ZIP":{"AREA":"546",
                           "STREET":"yjtyj",
                           "MAIN":"56"
                   }}
    }
FIRSTNAME
LOCATION
  ADDLINE2
  ADDLINE3
  PIN
  ZIP
    STREET
    MAIN
    AREA
ADDRESS
EMAIL
如何仅列出此表单中的密钥 名字 电子邮件 地址1 城市 位置{ADDLINE2,ADDLINE3,PIN,ZIP{AREA,STREET,MAIN}

我已经实现了这一点

for key in row.iterkeys():
    print key 
    for items in row[key]:
        print items 
但我甚至得到了它的价值。即使深度增加,它也应该能够列出所有子键。 需要此表单中的输出

 [
    {
        "FIRST NAME": "Nasim",
        "EMAIL": "ac@iaculisnec.net",
        "ADDLINE1": "855-8805 Nunc. Avenue",
        "CITY": "Masterton",
        "LOCATION":{"ADDLINE2":"855-8805",
                    "ADDLINE3":"Avenue",
                    "PIN":"100",
                    "ZIP":{"AREA":"5645",
                           "STREET":"hgh",
                           "MAIN":"87"
                    }}
    },
    {
        "FIRST NAME": "Xanthus",
        "EMAIL": "adipiscing.elit@tinciduntcongue.edu",
        "ADDLINE1": "357-4583 Curae; St.",
        "CITY": "Basildon",
        "LOCATION":{"ADDLINE2":"357-4583",
                    "ADDLINE3":"Curae; St.",
                    "PIN":"101",
                    "ZIP":{"AREA":"546",
                           "STREET":"yjtyj",
                           "MAIN":"56"
                   }}
    }
FIRSTNAME
LOCATION
  ADDLINE2
  ADDLINE3
  PIN
  ZIP
    STREET
    MAIN
    AREA
ADDRESS
EMAIL

您可以尝试以下递归方法:

def get_keys(d):
    for key in d.iterkeys():
        yield key
        if isinstance(d[key], dict):
            yield list(get_keys(d[key]))

for row in data:
    print list(get_keys(row))
由于
数据
是嵌套字典,这将为您提供以下输出:

['ADDLINE1', 'FIRST NAME', 'LOCATION', ['ADDLINE3', 'ADDLINE2', 'ZIP', ['STREET', 'MAIN', 'AREA'], 'PIN'], 'EMAIL', 'CITY']
['ADDLINE1', 'FIRST NAME', 'LOCATION', ['ADDLINE3', 'ADDLINE2', 'ZIP', ['STREET', 'MAIN', 'AREA'], 'PIN'], 'EMAIL', 'CITY']
请注意,键的顺序可能不同于原始词典中的顺序,因为无法保证生成键的顺序是什么。
d.iterkeys()
(或任何其他类似方法)

如果要将这些字符串转换为问题中所示的格式,可以使用以下方法:

def to_string(keys):
    return " ".join("{" + to_string(key) + "}" if isinstance(key, list) else key.replace(" ", "") for key in keys)

结果将是
ADDLINE1 FIRSTNAME LOCATION{ADDLINE3 ADDLINE2 ZIP{STREET MAIN AREA}PIN}EMAIL CITY
。请注意,这会将
FIRST NAME
等键折叠到
FIRSTNAME
(如您在示例中所做的),否则您需要使用
以外的其他分隔符,例如使用
”、“。请改为加入(…)
。就个人而言,我宁愿将其作为列表,而不是将其转换为字符串。

递归解决方案可能是:

def getkeys(x):
    result = []
    for k, v in x.items():
        result.append(k)
        if isinstance(v, dict):
            result += getkeys(v)
    return result

map(getkeys, your_json_objects_list)
[['ADDLINE1'、'FIRST NAME'、'LOCATION'、'ADDLINE3'、'ADDLINE2'、'ZIP', “街道”、“主要”、“区域”、“PIN”、“电子邮件”、“城市”]、['ADDLINE1', “名字”、“位置”、“地址行3”、“地址行2”、“邮编”、“街道”, “主要”、“区域”、“PIN”、“电子邮件”、“城市”]]


我想他想要的是一个嵌套列表,而不是一个简单的列表。你可能是对的。这个例子看起来像是列表和dict的奇怪混合体…非常感谢。。不知道可以使用该实例。如何将其转换为字符串,以便以这种形式获得输出