Ang*_*uez -1 python dictionary list python-2.7
我有这样的问题,我有这样的乘客的字典:
passengers = {
1: {'name': 'Foo', 'lastname': 'Bar', 'exclusive': True},
2: {'name': 'John', 'lastname': 'Doe'},
3: {'name': 'Rocky', 'lastname': 'Balboa', 'exclusive': True},
4: {'name': 'Mohammed', 'lastname': 'Smith'}
}
Run Code Online (Sandbox Code Playgroud)
而且我需要首先打印出这些项目的结果,然后是其余的:
这是所需的输出
List of passengers:
===================
1.- Foo Bar
2.- Rocky Balboa
3.- John Doe
4.- Mohammed Smith
Run Code Online (Sandbox Code Playgroud)
我试过了collections.deque,我找不到任何适合我的东西,直到我想出这个功能:
def prioritize_passengers(dictionary):
priority_list = []
normal_list = []
sorted_list = []
for key, item in dictionary.iteritems():
if 'exclusive' in item:
priority_list.append(key)
else:
normal_list.append(key)
sorted_list = priority_list + normal_list
return sorted_list
Run Code Online (Sandbox Code Playgroud)
然后我在我的数据上使用它,如下所示:
# Assuming passenger is the same var as above
sorted_list = prioritize_passengers(passengers)
print "List of passengers:\n==================="
for elem in sorted_list:
passenger = passengers[elem]
print "{} {}".format(passenger['name'], passenger['lastname']
Run Code Online (Sandbox Code Playgroud)
这是实现它的唯一方法还是有更清晰/有效的方法来实现它?同样,第二段是所需的输出.
是的,还有其他方法可以对该列表进行排序.这是一个:
passengers = {
1: {'name': 'Foo', 'lastname': 'Bar', 'exclusive': True},
2: {'name': 'John', 'lastname': 'Doe'},
3: {'name': 'Rocky', 'lastname': 'Balboa', 'exclusive': True},
4: {'name': 'Mohammed', 'lastname': 'Smith'}
}
list_of_passengers = sorted(
passengers.items(),
key=lambda x: (('exclusive' not in x[1]), x[0]))
for i, (_, passenger) in enumerate(list_of_passengers, 1):
print '{}. - {} {}'.format(i, passenger['name'], passenger['lastname'])
Run Code Online (Sandbox Code Playgroud)
既然你不关心除exclusive-ness 之外的顺序,那么你可能会对你有用:
passengers = {
1: {'name': 'Foo', 'lastname': 'Bar', 'exclusive': True},
2: {'name': 'John', 'lastname': 'Doe'},
3: {'name': 'Rocky', 'lastname': 'Balboa', 'exclusive': True},
4: {'name': 'Mohammed', 'lastname': 'Smith'}
}
list_of_passengers = sorted(
passengers.values(), key=lambda x: 'exclusive' not in x)
for i, passenger in enumerate(list_of_passengers, 1):
print '{}. - {} {}'.format(i, passenger['name'], passenger['lastname'])
Run Code Online (Sandbox Code Playgroud)
最后,如果你真正想做的是创建两个单独的列表,你可以使用filter()内置函数:
upper_crust = filter(lambda x: 'exclusive' in x, passengers.values())
riff_raff = filter(lambda x: 'exclusive' not in x, passengers.values())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |