【问题标题】:Make key lowercase in List of Dictionaries (Python3)在字典列表(Python3)中将键设为小写
【发布时间】:2020-05-09 11:41:39
【问题描述】:

现在已经查看 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”变成小写的“type”。 但是通过以下列表理解,它以某种方式使键成为值,反之亦然。

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

我最终得到[{'Book': 'type',....,而它应该是[{'type': 'Book',....

我仍然在努力理解列表理解语法,因此非常感谢 1. 有人用简单的英语解释我的列表理解的作用以及 2. 如何更改它以实现我正在寻找的内容。 :)

谢谢!

【问题讨论】:

  • lower_list = [ { k.lower():v for k,v in d.items() } for d in books ] ?您正在反转键和值
  • 我知道有人会在几秒钟内给出最简单的解决方案!太感谢了!你能解释一下“:”在这里的作用吗?
  • 这是 dict 中键和值之间的分隔符,您可以看到这样的理解:[{ myKey:myValue for myKey,myValue in d.items() } for d in books] in myKey,myValue in d.items() 你'正在解压缩从这样的字典生成的元组:(键,值),不知道现在是否更清楚了:p
  • 这是有道理的。感谢您花时间解释。 :)
  • 一个后续问题:我现在正在尝试对每个键进行小写,但 ISBN 除外。但显然它不是有效的语法: ` ` [{v:k.lower() for k,v if k not "ISBN" in d.items()} for d in books]  ` `

标签: python-3.x list list-comprehension


【解决方案1】:

所以你的第一个问题:

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 ]

但你应该考虑使用 for 循环:如果你需要更多的操作或条件,它会开始难以进一步修改。

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

【讨论】:

  • 哇。你太棒了!非常感谢。与此同时,我能够制作这个。花了我一整天。但你的版本似乎更优雅。 ` def lower_but_ISBN(lower_dict): newdict = {} for k, v in lower_dict.items(): if not k == 'ISBN': if isinstance(v, dict): v = lower_dict(v) newdict[ k.lower()] = v else: if isinstance(v, dict): v = lower_dict(v) newdict[k] = v return newdict for the item in books: print(lower_but_ISBN(item)) `
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 2023-01-12
  • 2020-04-30
  • 2019-09-06
  • 1970-01-01
相关资源
最近更新 更多