我正在使用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)
此外,可以采取哪些措施来降低复杂性并使其高效?
答案 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)
没有del
和next(iter(...))
内容。
你可以把它写成理解,但它会变长:
[v for d in my_dictionary for k,v in d.items() if k != 'position']