从2D lis创建字典

2024-09-29 06:28:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建一个字典,以作者的姓和名为键,以现存量、价格和书名为值。你知道吗

[['Shakespeare', 'William', 'Rome And Juliet', '5', '5.99'], ['Shakespeare', 'William', 'Macbeth', '3', '7.99'], ['Dickens', 'Charles', 'Hard Times', '7', '27.00'], ['']]

我已经整理了这个二维列表,到目前为止,我被卡住了。你知道吗

任何帮助都将不胜感激!你知道吗


Tags: and字典价格作者shakespearewilliamtimescharles
2条回答

下面将创建一个字典,将每个作者的名字映射到他们所写的书籍的list。这是使用名为^{}的内置字典类型的专门化来完成的,该类型在collections模块中定义。你知道吗

from collections import defaultdict
from pprint import pprint

books = [['Shakespeare', 'William', 'Rome And Juliet', '5', '5.99'],
         ['Shakespeare', 'William', 'Macbeth', '3', '7.99'],
         ['Dickens', 'Charles', 'Hard Times', '7', '27.00'],
         ['']]

d = defaultdict(list)
for book in (book for book in books if book[0]):
    d[book[0], book[1]].append(book[2:])

pprint(d)

输出:

{('Dickens', 'Charles'): [['Hard Times', '7', '27.00']],
 ('Shakespeare', 'William'): [['Rome And Juliet', '5', '5.99'],
                              ['Macbeth', '3', '7.99']]}

听起来你对Python没有多少经验。您应该注意本教程的以下部分(当您完成整个教程时,这是非常值得您花费时间的!):looping techniquesdictionariestuples and sequences。你知道吗

最后,你可能会想要一些类似的东西:

>>> books = [['Shakespeare', 'William', 'Rome And Juliet', '5', '5.99'], ['Shakespeare', 'William', 'Macbeth', '3', '7.99'], ['Dickens', 'Charles', 'Hard Times', '7', '27.00'], ['']]
>>> d = dict()
>>> for book in books:
    if book and len(book) > 3:  # make sure book list is not empty and has more than three elements
        d[tuple(book[:2])] = book[3:] + [book[2]]  # make sure value reflects your desired order

>>> d
{('Dickens', 'Charles'): ['7', '27.00', 'Hard Times'], ('Shakespeare', 'William'): ['3', '7.99', 'Macbeth']}

请注意,字典键必须是不可变的,因此我将d的每个键都设为一个元组。你知道吗

相关问题 更多 >