使用next()和iter()查找密钥

时间:2018-03-26 11:46:06

标签: python dictionary

我正在使用Python 3.6。我想从JSON对象中分别获取键和值。但是当我尝试使用下面的方法时,它会给我错误

  

ValueError:没有足够的值来解包(预期2,得到1)

my_dictionary = [{
            "position": 0,
            "A": "Age"
        }, {
            "B": "Class",
            "position": 1
        }, {
            "C": "ID",
            "position": 2
        }, {
            "D": "Section",
            "position": 3
        }, {
            "E": "Height",
            "position": 4
        }, {
            "F": "Weight",
            "position": 5
        }, {
            "G": "Name",
            "position": 6
        }, {
            "position": 7,
            "H": "Jack"
        }, {
            "position": 8,
            "I": "Williams"
        }]
for tokn in my_dictionary:
    del tokn['position']

keys = [next(iter(x)) for x in my_dictionary]
# Error: values = [next(iter(y)) for x,y in prediction]
print(keys)
# print(values)
Output: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']

这些是关键。我想要价值观。但是使用值“代号”的代码,我得到:

  

错误:ValueError:没有足够的值来解包(预期2,得1)


  

此外,可以采取哪些措施来降低复杂性并使其高效?

2 个答案:

答案 0 :(得分:3)

迭代字典总能给你钥匙。如果您想要值,请使用.values()方法。

[next(iter(x.values())) for x in my_dictionary]

答案 1 :(得分:1)

代码似乎很混乱。您可以从字典中删除键值对,以便在您想要访问"随机元素时避免使用它们#34;。更好的方法通常是跳过"跳过"他们在迭代期间。

默认情况下,通过字典对字典进行迭代,但您也可以明确地迭代键/值或键/值:

  • for key in x.keys()表示密钥(与for key in x相同)
  • for value in x.values()代表值
  • for key, value in x.items()获取键和值

我怀疑你想要将.items解压缩为两个变量。

只是为了展示使用for循环和条件的替代方法:

keys = []
values = []
for inner_dictionary in my_dictionary:
    for key, value in inner_dictionary.items():
        if key != 'position':
            keys.append(key)
            values.append(value)

没有delnext(iter(...))内容。

你可以把它写成理解,但它会变长:

[v for d in my_dictionary for k,v in d.items() if k != 'position']