我正在尝试将程序生成的黑胶唱片字典('sample_music_dict')转换为一个新字典(见下面的'new_music_dict'),该字典将艺术家的专辑连接到单个列表中,其中艺术家成为键。然后,我将使用这本新词典制作印刷品、屏幕列表和其他东西。
源字典. 这是我要从
转换的字典sample_music_dict = {
'A-HA': [
'A-Ha',
['HEADLINES & DEADLINES', 'Headlines & Deadlines', 'Jan-17', '']
],
'ABC': [
'Abc',
['THE LEXICON OF LOVE', 'The Lexicon Of Love', 'Jan-17', '']
],
'AC/DC': [
'Ac/Dc',
['BACK IN BLACK', 'Back In Black', 'Jan-17', ''],
['HIGHWAY TO HELL', 'Highway to Hell', 'Jan-17', '']
],
'JON ANDERSON': [
'Jon Anderson',
['3 SHIPS', '3 Ships', 'Nov-19', ''],
['IN THE CITY OF ANGELS', 'In The City Of Angels', 'Jan-17', ''],
['OLIAS OF SUNHILLOW', 'Olias of Sunhillow', 'Jan-17', '']
]
}
目标字典. 这是我要转换为
的字典new_music_dict = {
'Abba':['Abba Greatest Hits Vol.2'],
'ABC':['The Lexicon Of Love'],
'AC/DC':['Back In Black','Highway to Hell'],
'All About Eve':['All About Eve'],
'Jon Anderson':['3 Ships','In The City Of Angels','Olias of
Sunhillow']
}
为了解决这个问题,我尝试通过使用for和while语句的代码来遍历源字典,但是我不知道如何将数据拉入我需要的列表格式。
例如,如果我将源字典分解为它的基本形式,它有一个KEY(艺术家姓名大写),VALUE是一个包含艺术家姓名的列表(Title case),后面是多个列表-每个艺术家的专辑一个列表。在每个子列表中at是专辑名称和关于专辑的其他三个信息。像这样:
sample_music_dict = {
'KEY':
['Value'
['L1_0 - Album Nme', 'L1_1- Info1', 'L1_2- Info2', 'L1_3- Info3',
['L2_0 - Album Nme', 'L2_1- Info1', 'L2_2- Info2', 'L2_3- Info3'],
['L3_0 - Album Nme', 'L3_1- Info1', 'L3_2- Info2', 'L3_3- Info3'],
['L4_0 - Album Nme', 'L4_1- Info1', 'L4_2- Info2', 'L4_3- Info3']
}
我要生成的是一个字典,其中KEY为艺术家名,然后是一个包含该艺术家的所有专辑名的列表。就像下面的提纲:
new_music_dict = {
'KEY': ['L1_0 - Album Nme','L2_0 - Album Nme',
'L3_0 - Album Nme','L4_0 - Album Nme']
}
一个艺人可能有10张专辑,也可能只有2张,所以专辑的数量可以是可变的。
一旦我可以生成我想要的目标字典格式,我就可以使用新字典生成表格数据输出(PrettyTable或textttable),还可以在我的程序中创建不同的功能。
有什么帮助或建议吗?谢谢。感谢您编辑您的原始问题,并为此付出了如此多的努力!下面是一个似乎有效的解决方案:
import pprint
sample_music_dict = {
'A-HA': [
'A-Ha',
['HEADLINES & DEADLINES', 'Headlines & Deadlines', 'Jan-17', '']
],
'ABC': [
'Abc',
['THE LEXICON OF LOVE', 'The Lexicon Of Love', 'Jan-17', '']
],
'AC/DC': [
'Ac/Dc',
['BACK IN BLACK', 'Back In Black', 'Jan-17', ''],
['HIGHWAY TO HELL', 'Highway to Hell', 'Jan-17', '']
],
'JON ANDERSON': [
'Jon Anderson',
['3 SHIPS', '3 Ships', 'Nov-19', ''],
['IN THE CITY OF ANGELS', 'In The City Of Angels', 'Jan-17', ''],
['OLIAS OF SUNHILLOW', 'Olias of Sunhillow', 'Jan-17', '']
]
}
def get_pairs():
from operator import itemgetter
for key, value in sample_music_dict.items():
yield key, list(map(itemgetter(1), value[1:]))
new_music_dict = dict(get_pairs())
pprint.pprint(new_music_dict)
输出:
{'A-HA': ['Headlines & Deadlines'],
'ABC': ['The Lexicon Of Love'],
'AC/DC': ['Back In Black', 'Highway to Hell'],
'JON ANDERSON': ['3 Ships', 'In The City Of Angels', 'Olias of Sunhillow']}
>>>
pprint
模块不是严格要求的,它只是为了得到一个漂亮的打印输出。你说你想要列表中的字符串来自第一列;(索引)每个专辑列表-但它不应该是第二个索引,而不是第一个?由于第一个索引包含全大写标题…这个解决方案假设我们想要的专辑标题位于每个专辑列表的第二个索引处。
所以我想我可以尝试从我的数据中提取多个信息。例如食谱程序:
"sample_data = {'PERFECT pancake RECIPE':"完美的煎饼食谱","100克普通面粉","2个鸡蛋","300毫升半乳糖"脱脂牛奶","1汤匙葵花籽油或蔬菜油,煎炸时要多加",'捏盐'],[' 1。把100g普通面粉和一小撮盐放进一个大的搅拌碗里。"、"2。在中间打一个孔,打两个鸡蛋进去中间。","bbc")}
def get_pairs_new():
from operator import itemgetter
for key, value in sample_data.items():
yield key, list(map(itemgetter(1), value[1:]))
recipe = dict(get_pairs_new())
print(new_music_dict)
t = Texttable()
for key, value in recipe.items():
artist = key
album = ("n".join(value))
t.add_rows([['Artist', 'Album'], [artist, album]])
print(t.draw())
"
然后能够在表格中打印名称,成分,说明和配方来源。如果我将itemgetter(1)更改为itemgetter(1,2),它将返回一个元组,然后程序崩溃。由于