67802


複数の辞書型を一つのリストで管理したいです。

[code]

    {'itag': 18, 'mime_type': 'video/mp4', 'res': '360p', 'fps': 30, 'vcodec': 'avc1.42001E', 'acodec': 'mp4a.40.2', 'file_type': 'video'}
    {'itag': 313, 'mime_type': 'video/webm', 'res': '2160p', 'fps': 30, 'vcodec': 'vp9', 'acodec': None, 'file_type': 'video'}
    {'itag': 271, 'mime_type': 'video/webm', 'res': '1440p', 'fps': 30, 'vcodec': 'vp9', 'acodec': None, 'file_type': 'video'}　・・・続く
    
[/code]

上記の値を下記のようにリストでまとめたいのですが、`リスト.append（辞書型）をfor 辞書型 in
jsonファイルのように[辞書型,辞書型・・・]:`で追加してくとなぜかリストの中身が最後の辞書型の値に全て置き換わってしまいます。まさに下の通りです。おそらく仕様だと思うのですが、期待する動作にしたい場合どうすれば良いでしょうか？

[code]

    [{'itag': 251, 'mime_type': 'audio/webm', 'res': None, 'fps': 30, 'vcodec': None, 'acodec': 'opus', 'file_type': 'audio'}, 
    {'itag': 251, 'mime_type': 'audio/webm', 'res': None, 'fps': 30, 'vcodec': None, 'acodec': 'opus', 'file_type': 'audio'}, 
    {'itag': 251, 'mime_type': 'audio/webm', 'res': None, 'fps': 30, 'vcodec': None, 'acodec': 'opus', 'file_type': 'audio'},
    
[/code]

実際のコード

[code]

    def makelist(self):
            alltag = self.alltag
            tags = {}
            tags_list = []
            audios = []
            videos = []
    
            for tag in alltag:
                
                tags['itag'] = tag.itag
                tags['mime_type'] = tag.mime_type
                tags['res'] = tag.resolution
                tags['abr'] = tag.abr
                tags['fps'] = tag.fps
                tags['vcodec'] = tag.video_codec
                tags['acodec'] = tag.audio_codec
                tags['file_type'] = tag.type
                
                tags_list.append(tags.copy())
                
            for tags in tags_list:
                if tags['file_type'] == 'audio':
                    audios.append(tags.copy())# ここの.copyなしでやると上手く行かない。
    
                if tags['file_type'] == 'video':
                    videos.append(tags.copy())
            
            self.audios = audios
            self.videos = videos
    
[/code]


CC BY-SA 4.0
2020-06-19T03:49:56.860
67801
2020-06-20T01:40:53.147
2020-06-20T01:40:53.147
22565
22565
question
python python3
PythonでJsonファイルのように、リスト型に辞書型を代入して使用したい。


例えば下記のコードで全ての辞書型を入れられます。  
`for 辞書型 in
複数辞書型:`のコードで`複数辞書型`の配列？に最後の辞書型を全て代入していたり、for文で取得した`辞書型`を使わずに複数辞書型の末尾のみ取得していたりしないでしょうか。  
質問文を編集して実際のコードを追記していただけると、より明確な回答を得やすいかと思います。

[code]

    d1 = {'itag': 18, 'mime_type': 'video/mp4', 'res': '360p', 'fps': 30, 'vcodec': 'avc1.42001E', 'acodec': 'mp4a.40.2', 'file_type': 'video'}
    d2 = {'itag': 313, 'mime_type': 'video/webm', 'res': '2160p', 'fps': 30, 'vcodec': 'vp9', 'acodec': None, 'file_type': 'video'}
    d3 = {'itag': 271, 'mime_type': 'video/webm', 'res': '1440p', 'fps': 30, 'vcodec': 'vp9', 'acodec': None, 'file_type': 'video'}
    d4 = {'itag': 251, 'mime_type': 'audio/webm', 'res': None, 'fps': 30, 'vcodec': None, 'acodec': 'opus', 'file_type': 'audio'}
    l = list()
    for d in [d1, d2, d3, d4]:
        l.append(d)
    print(l)
    
    # [{'itag': 18, 'mime_type': 'video/mp4', 'res': '360p', 'fps': 30, 'vcodec': 'avc1.42001E', 'acodec': 'mp4a.40.2', 'file_type': 'video'}, {'itag': 313, 'mime_type': 'video/webm', 'res': '2160p', 'fps': 30, 'vcodec': 'vp9', 'acodec': None, 'file_type': 'video'}, {'itag': 271, 'mime_type': 'video/webm', 'res': '1440p', 'fps': 30, 'vcodec': 'vp9', 'acodec': None, 'file_type': 'video'}, {'itag': 251, 'mime_type': 'audio/webm', 'res': None, 'fps': 30, 'vcodec': None, 'acodec': 'opus', 'file_type': 'audio'}]
    
[/code]


CC BY-SA 4.0
2020-06-19T04:15:31.853
67802
2020-06-19T04:15:31.853
9820
67801
answer