Сделать ключевые строчные буквы в Списке словарей (Python3) - PullRequest
0 голосов
/ 09 мая 2020

Просматривал Stackoverflow и документацию уже 2 дня, я новичок и просто не могу прогрессировать. Я использую Python 3.8 .

У меня есть список словарей:

books = [{'Type': 'Book', 'Date': '2011', 'Publication Year': '2011', 'Place Published': 'New York', 'Publisher': 'Simon & Schuster', 'Author': 'Walter Isaacson', 'ISBN': '978-1-4516-4853-9', 'Title': 'Test Steve Jobs'}, {'Type': 'Book', 'Date': '2001', 'Publication Year': '2001', 'Place Published': 'Oxford', 'Publisher': 'Oxford University press', 'Author': 'Peter Hall', 'ISBN': '978-0-19-924775-2', 'Title': 'Test Varieties of capitalism: the institutional foundations of comparative advantage'}]
print(books)

Я хочу преобразовать ключ «Type» в строчный тип ". Но со следующим пониманием списка он каким-то образом делает ключ к значению и наоборот.

lower_list = [ { v:k.lower() for k,v in d.items() } for d in books ]
print(lower_list)

Я получаю [{'Book': 'type',...., когда должно быть [{'type': 'Book',....

Я борюсь с пониманием синтаксиса понимания списка, поэтому был бы благодарен за 1. кто-нибудь, кто объяснит, что делает мое понимание списка на простом английском sh и 2. как изменить его, чтобы достичь того, что я ищу. :)

Спасибо!

1 Ответ

0 голосов
/ 10 мая 2020

Итак, ваша первая проблема:

lower_list = [ { k.lower():v for k,v in d.items() } for d in books ] ? 

Вы инвертировали ключ и значения.

Ваш последний вопрос, как пропустить нижний регистр ключа ISBN:

[ { k if k is "ISBN" else k.lower():v.lower() for k,v in d.items()} for d in books ]

Но вам следует подумать об использовании для l oop: если вам нужно больше операций или условий, их будет трудно изменить дальше.

my_final_books = []

for d in books:
    for k,v in d.items():
        if k is "ISBN":
            key = k
        else:
            key = k.lower()
        # or ternary form key = k if k is "ISBN" else k.lower()
        my_final_books.append({key:v})
        # do more logic here
...