我为看似令人困惑的标题道歉,希望代码能帮助澄清这个问题。
我有一个python数据结构,如下所示:
people = [
{
'id': 1,
'name': 'Ada',
'age': 55
},
{
'id': 2,
'name': 'Bart',
'age': 46
},
{
'id': 3,
'name': 'Chloe',
'age': 37
},
{
'id': 4,
'name': 'Dylan',
'age': 28
}
]
我想实现以下目标:
1, Ada, 55
2, Bart, 46
3, Chloe, 37
4, Dylan, 28
无需像person['key']
那样处理每个字典键,而只需要key
;像这样的东西:
# BOGUS CODE, WON'T WORK
for (id, name, age) in people:
print('{}, {}, {}'.format(id, name, age))
(好奇地打印name, id, age
)
提前谢谢!
答案 0 :(得分:2)
你可以d:
$('#app-icon-btn').click(function () {
var oFile = $('#avatarInput')[0].files[0];
var rFilter = /^(image\/jpeg|image\/png)$/i;
if(typeof(oFile) == "undefined"){
swal('Please select a valid image file (jpg and png are allowed)');
return false;
}
var data_from = $('#data-from').serialize();
if($('#app-icon-modal-btn').siblings().children('img').length){
}
<?php
if(isset($appdata) && intval($appdata['is_update']) == 5){ ?>
var is_image = 6;
<?php }else{?>
var is_image = 1;
<?php }?>
$.post(HTTP_ROOT + "/apps/updatefireTvApp", {'is_ajax': 1,'is_image': is_image , 'data_from': data_from}, function (res) {
if (res) {
//alert(res);
$('#app-icon-from').submit();
}
});
});
在Python 3.6中你也可以这样做(前提是这些值的定义与你在原始问题中显示的顺序完全相同):
for person in people:
person_id, name, age = person['id'], person['name'], person['age']
print(person_id, name, age)
但是,这取决于字典的定义完全,就像在您的示例中一样。如果值的顺序发生变化,代码将会中断,因为值也会混合。
提示:我故意命名我的变量for person in people:
person_id, name, age = person.values()
print(person_id, name, age)
而不是person_id
,因为它是影响内置变量和/或函数的反模式,它发生了那there's a built-in called id。
答案 1 :(得分:2)
您使用operator.itemgetter()
和map()
。
In [31]: from operator import itemgetter
In [32]: list(map(itemgetter('id', 'name', 'age'), people))
Out[32]: [(1, 'Ada', 55), (2, 'Bart', 46), (3, 'Chloe', 37), (4, 'Dylan', 28)]
但请注意,如果您想要所有键中的所有值,您只需在列表推导中使用dict.values()
即可获得所有相应的值。
In [33]: [d.values() for d in people]
Out[33]:
[dict_values([1, 'Ada', 55]),
dict_values([2, 'Bart', 46]),
dict_values([3, 'Chloe', 37]),
dict_values([4, 'Dylan', 28])]
答案 2 :(得分:0)
for find in people:
print('{0}, {1}, {2}'.format(find["id"], find["name"], find["age"]))
将起作用
答案 3 :(得分:0)
您可以使用__iter__
方法构建一个小类:
class Group:
def __init__(self, d):
self.__dict__ = d
class People:
def __init__(self, data):
self.data = data
def __iter__(self):
for i in self.data:
d = Group(i)
yield d.id, d.name, d.age
people = [{'age': 55, 'id': 1, 'name': 'Ada'}, {'age': 46, 'id': 2, 'name': 'Bart'}, {'age': 37, 'id': 3, 'name': 'Chloe'}, {'age': 28, 'id': 4, 'name': 'Dylan'}]
for a, b, c in People(people):
print('{} {} {}'.format(a, b, c))
输出:
1 Ada 55
2 Bart 46
3 Chloe 37
4 Dylan 28