使用python api将dict存储在dicts列表中......没有键值

时间:2014-10-29 02:54:49

标签: python dictionary

python API(gmusicapi)将播放列表存储为一个词典列表,其中轨道信息作为该词典中的词典。

-edit-这是错的。它在打印时确实有某种键,但是我无法找到如何访问dict中的键。

list = [
    { ##this dict isn't a problem, I can loop through the list and access this.
    'playlistId': '0xH6NMfw94',
    'name': 'my playlist!',
    {'trackId': '02985fhao','album': 'pooooop'}, #this dict is a problem because it has no key name. I need it for track info
    'owner': 'Bob'
    },

    { ##this dict isn't a problem, I can loop through the list and access this.
    'playlistId': '2xHfwucnw77',
    'name': 'Workout',
    'track':{'trackId': '0uiwaf','album': 'ROOOCKKK'}, #this dict would probably work
    'owner': 'Bob'
    }
]

我尝试过使用for循环并通过以下方式访问它:

def playLists(self):
    print 'attempting to retrieve playlist song info.'
    playListTemp = api.get_all_user_playlist_contents()
    for x in range(len(playListTemp)):
        tempdictionary = dict(playListTemp[x])

这里的问题是tempdictionary有一个叫做曲目的词典,但无论我做什么,我似乎无法访问其中的键/值对。

打印时返回如下内容:

[u'kind', u'name', u'deleted', u'creationTimestamp', u'lastModifiedTimestamp', u'recentTimestamp', u'shareToken', 'tracks', u'ownerProfilePhotoUrl', u'ownerName', u'accessControlled', u'type', u'id', u'description']

其中'跟踪'是一个包含艺术家,标题,轨道号等的词典

我也尝试过这样的事情:

tempdictionary ['轨道'] [X] ['标题'] 没有运气。其他时候我尝试创建一个新的字典与轨道字典作为一个velue但然后我得到一个错误说它需要值2,它发现像11等。

我是python的新手,所以如果有人在这里可以提供帮助,我会非常感激

2 个答案:

答案 0 :(得分:3)

  

打印时确实有某种键,但我无法找到如何访问dict中的键。

迭代dict:

for key in dct:
    print(key)
    # or do any number of other things with key

如果您还要查看字典值,请使用.items()为自己保存字典查找:

for key, value in dct.items():
    print(key)
    print(value)

答案 1 :(得分:1)

您可以考虑使用类来封装常见特征。目前,您的每个曲目和播放列表词典都有很多重复的代码(即“track_id =”,“owner =”Bob“)。使用类可以减少重复并使您的意义更加明显和明确。

class AudioTrack(object):
    def __init__(self, ID, album=None):
        self.id = ID
        self.album = album
        self.owner = 'Bob'

创建一个像这样的AudioTrack对象:

your_first_track = AudioTrack('02985fhao', 'pooooop')

或者创建一个AudioTrack对象列表,如下所示:

your_tracks = [
    AudioTrack("0x1", album="Rubber Soul"),
    AudioTrack("0x2", album="Kind of Blue"),
    ...
    ]

通过这种方式,您可以检查每个AudioTrack对象:

your_first_track.id     #Returns '02985fhao'

或者为your_tracks中的所有AudioTrack对象执行某些操作:

#Prints the album of every track in the list of AudioTrack intances
for track in your_tracks:
    print track.album

您可以使用以下字典制作播放列表:

my_playlist = {
    id: "0x1",
    name: "my playlist",
    tracks:  [AudioTrack("0x1", album="Rubber Soul"),
              AudioTrack("0x2", album="Kind of Blue")]
    }