Узнать, какое значение принадлежит какому словарю в списке? - PullRequest
0 голосов
/ 19 июня 2020

Допустим, у меня есть список диктовок:

list_a = [{'hair_color': 'blonde', 'height': 175, 'weight', 50},
          {'hair_color': 'brunette', 'height': 165, 'weight', 65},
          {'hair_color': 'grey', 'height': 183, 'weight', None}

И я получаю максимальное значение высоты:

print(max(d.get('height') for d in list_a if d.get('height') is not None))

Вывод: 183

Допустим, теперь я хочу знать, какого цвета волосы у человека, рост которого 183. Как я могу это получить?

Ответы [ 2 ]

3 голосов
/ 19 июня 2020

Здесь может пригодиться аргумент key для maxmin и sort). Вместо того, чтобы получить последовательность высот и , затем , найти максимальную высоту объекта, он позволяет вам найти элемент в списке , который имеет максимальную высоту .

Вот пример:

list_a = [{'hair_color': 'blonde', 'height': 175, 'weight', 50},
          {'hair_color': 'brunette', 'height': 165, 'weight', 65},
          {'hair_color': 'grey', 'height': 183, 'weight', None}

tallest_person = max(list_a, key=lambda item:item.get('height', 0))
print(tallest_person)

Давать:

{'hair_color': 'grey', 'height': 183, 'weight': None}
0 голосов
/ 19 июня 2020

Вы можете напрямую получить словарь, содержащий нужное вам значение, из max () или min () следующим образом:

def height_key_func (item):
    h = item.get("height", 0) # If "height" is not in the dict, 0 will be used
    # max() must get an object that is comparable with int and/or float:
    if isinstance(h, (int, float)):
        return h
    return 0

person = max(list_a, key=height_key_func)
print (person["hair_color"])

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

def find_by_value (k, v):
    for x in list_a:
        if x[k]==v:
            return x

person = find_by_value("height", 180)
if person is None:
    print("Not found")

Если вы хотите найти всех возможных людей с одинаковым ростом, то:

def find_by_value (k, v):
    persons = []
    for x in list_a:
        if x[k]==v:
            persons.append(x)
    return persons

Вы можете искать по любому значению, равному запросу, а не только по высоте:

def find_by_any_value (v):
    persons = []
    for x in list_a:
        if v in x.values():
            persons.append(x)
    return persons

Наконец, вы можете сократить это, например:

def find_by_value (k, v):
    return [x for x in list_a if x[k]==v]

persons = find_by_value("height", 180)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...