отфильтровать товар из заказанного - PullRequest
0 голосов
/ 29 июня 2018

Для следующего упорядоченного словаря, как я могу напечатать только 1) «Цена» и ее стоимость 2) ранжируйте его в порядке убывания с соответствующим 'room_id'

[OrderedDict([('room_id', '1133718'), ('survey_id', '1280'), ('host_id', '6219420'), ('room_type', 'Shared room'), ('country', ''), ('city', 'Singapore'), ('borough', ''), ('neighborhood', 'MK03'), ('reviews', '9'), ('overall_satisfaction', '4.5'), ('accommodates', '12'), ('bedrooms', '1.0'), ('bathrooms', ''), ('price', '74.0'), ('minstay', ''), ('last_modified', '2017-05-17 09:10:25.431659'), ('latitude', '1.293354'), ('longitude', '103.769226'), ('location', '0101000020E6100000E84EB0FF3AF159409C69C2F693B1F43F')]), OrderedDict([('room_id', '3179080'), ('survey_id', '1280'), ('host_id', '15295886'), ('room_type', 'Shared room'), ('country', ''), ('city', 'Singapore'), ('borough', ''), ('neighborhood', 'TS17'), ('reviews', '15'), ('overall_satisfaction', '5.0'), ('accommodates', '12'), ('bedrooms', '1.0'), ('bathrooms', ''), ('price', '77.0'), ('minstay', ''), ('last_modified', '2017-05-17 09:10:24.216548'), ('latitude', '1.310862'), ('longitude', '103.858828'), ('location', '0101000020E6100000E738B709F7F659403F1BB96E4AF9F43F')]), OrderedDict([('room_id', '15303457'), ('survey_id', '1280'), ('host_id', '97053568'), ('room_type', 'Shared room'), ('country', ''), ('city', 'Singapore'), ('borough', ''), ('neighborhood', 'MK05'), ('reviews', '0'), ('overall_satisfaction', '0.0'), ('accommodates', '14'), ('bedrooms', '1.0'), ('bathrooms', ''), ('price', '60.0'), ('minstay', ''), ('last_modified', '2017-05-17 09:10:16.969900'), ('latitude', '1.333744'), ('longitude', '103.764612'), ('location', '0101000020E610000044882B67EFF0594093C7D3F20357F53F')])]

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

С учетом списка OrderedDicts:

from collections import OrderedDict
li=[OrderedDict([('room_id', '1133718'), ('survey_id', '1280'), ('host_id', '6219420'), ('room_type', 'Shared room'), ('country', ''), ('city', 'Singapore'), ('borough', ''), ('neighborhood', 'MK03'), ('reviews', '9'), ('overall_satisfaction', '4.5'), ('accommodates', '12'), ('bedrooms', '1.0'), ('bathrooms', ''), ('price', '74.0'), ('minstay', ''), ('last_modified', '2017-05-17 09:10:25.431659'), ('latitude', '1.293354'), ('longitude', '103.769226'), ('location', '0101000020E6100000E84EB0FF3AF159409C69C2F693B1F43F')]), OrderedDict([('room_id', '3179080'), ('survey_id', '1280'), ('host_id', '15295886'), ('room_type', 'Shared room'), ('country', ''), ('city', 'Singapore'), ('borough', ''), ('neighborhood', 'TS17'), ('reviews', '15'), ('overall_satisfaction', '5.0'), ('accommodates', '12'), ('bedrooms', '1.0'), ('bathrooms', ''), ('price', '77.0'), ('minstay', ''), ('last_modified', '2017-05-17 09:10:24.216548'), ('latitude', '1.310862'), ('longitude', '103.858828'), ('location', '0101000020E6100000E738B709F7F659403F1BB96E4AF9F43F')]), OrderedDict([('room_id', '15303457'), ('survey_id', '1280'), ('host_id', '97053568'), ('room_type', 'Shared room'), ('country', ''), ('city', 'Singapore'), ('borough', ''), ('neighborhood', 'MK05'), ('reviews', '0'), ('overall_satisfaction', '0.0'), ('accommodates', '14'), ('bedrooms', '1.0'), ('bathrooms', ''), ('price', '60.0'), ('minstay', ''), ('last_modified', '2017-05-17 09:10:16.969900'), ('latitude', '1.333744'), ('longitude', '103.764612'), ('location', '0101000020E610000044882B67EFF0594093C7D3F20357F53F')])]

Вы можете сделать:

>>> li2=[OrderedDict([('room_id',od['room_id']),('price',od['price'])]) for od in li]
>>> sorted(li2, key=lambda od: float(od['price']), reverse=True)
[OrderedDict([('room_id', '3179080'), ('price', '77.0')]), OrderedDict([('room_id', '1133718'), ('price', '74.0')]), OrderedDict([('room_id', '15303457'), ('price', '60.0')])]

Если вы хотите отформатировать это для печати:

>>> li3=sorted(li2, key=lambda od: float(od['price']), reverse=True)
>>> print("\n".join(["Room ID: {} Price: {}".format(od['room_id'], od['price']) for od in li3]))
Room ID: 3179080 Price: 77.0
Room ID: 1133718 Price: 74.0
Room ID: 15303457 Price: 60.0
0 голосов
/ 29 июня 2018

@ Arjun , вы также можете попробовать следующий код для решения вашей проблемы.

В решении используется концепция понимания списка и sorted () с одним из ключевых аргументов key .

from collections import OrderedDict

dicts = [
    OrderedDict([
        ('room_id', '1133718'), ('survey_id', '1280'),
        ('host_id', '6219420'), ('room_type', 'Shared room'), 
        ('country', ''), ('city', 'Singapore'), ('borough', ''), 
        ('neighborhood', 'MK03'), ('reviews', '9'), 
        ('overall_satisfaction', '4.5'), ('accommodates', '12'), 
        ('bedrooms', '1.0'), ('bathrooms', ''), ('price', '74.0'), 
        ('minstay', ''), ('last_modified', '2017-05-17 09:10:25.431659'), 
        ('latitude', '1.293354'), ('longitude', '103.769226'), 
        ('location', '0101000020E6100000E84EB0FF3AF159409C69C2F693B1F43F')]), 
    OrderedDict([('room_id', '3179080'), ('survey_id', '1280'), 
        ('host_id', '15295886'), ('room_type', 'Shared room'), 
        ('country', ''), ('city', 'Singapore'), ('borough', ''), 
        ('neighborhood', 'TS17'), ('reviews', '15'), 
        ('overall_satisfaction', '5.0'), ('accommodates', '12'), 
        ('bedrooms', '1.0'), ('bathrooms', ''), ('price', '77.0'), 
        ('minstay', ''), ('last_modified', '2017-05-17 09:10:24.216548'), 
        ('latitude', '1.310862'), ('longitude', '103.858828'), 
        ('location', '0101000020E6100000E738B709F7F659403F1BB96E4AF9F43F')]), 
    OrderedDict([('room_id', '15303457'), ('survey_id', '1280'), 
        ('host_id', '97053568'), ('room_type', 'Shared room'), 
        ('country', ''), ('city', 'Singapore'), ('borough', ''), 
        ('neighborhood', 'MK05'), ('reviews', '0'), 
        ('overall_satisfaction', '0.0'), ('accommodates', '14'), 
        ('bedrooms', '1.0'), ('bathrooms', ''), ('price', '60.0'), 
        ('minstay', ''), ('last_modified', '2017-05-17 09:10:16.969900'), 
        ('latitude', '1.333744'), ('longitude', '103.764612'), 
        ('location', '0101000020E610000044882B67EFF0594093C7D3F20357F53F')])];

output = '\n'.join([ 'room_id: {}, price: {}'.format(
    item['room_id'], item['price']
) for item in sorted(dicts, key=lambda d: int(d['room_id']))])

print(output);

Вывод "

room_id: 1133718, price: 74.0
room_id: 3179080, price: 77.0
room_id: 15303457, price: 60.0
0 голосов
/ 29 июня 2018

Чтобы заказать по price, вы можете использовать sorted с пользовательским ключом:

res = sorted(L, key=lambda x: float(x['price']), reverse=True)

Чтобы извлечь результат в виде комбинации цена и номер_идентификатора, вы можете использовать понимание списка:

res_id_price = [(x['room_id'], x['price']) for x in res]

Если вы хотите распечатать и вам не нужен список:

print(*((x['room_id'], x['price']) for x in res), sep='\n')

('3179080', '77.0')
('1133718', '74.0')
('15303457', '60.0')
...