下面有一个json格式的字典
public class MusicObjectTable
{
public List<IArtist> Artists;
public List<IAlbum> Albums;
public List<ITrack> Tracks;
public MusicObjectTable()
{
this.Artists = new List<IArtist>();
this.Albums = new List<IAlbum>();
this.Tracks = new List<ITrack>();
}
public MusicObjectTable(List<IArtist> artists, List<IAlbum> albums, List<ITrack> tracks)
{
this.Artists = artists;
this.Albums = albums;
this.Tracks = tracks;
}
}
}
与此json一起,我分别在元组中有2个ids(823feb2,823efl2)。现在,我需要在新字典中获取键值对(id [as key]和message [as value])的范围。为此,我需要从第一个ID获取所有ID和消息,直到它与最后一个ID匹配为止(在所有ID和消息之间应插入新字典中。)位于这些ID之外的其余部分应忽略。 简而言之,预期结果应包含除键(8782)之外的所有键(823feb2,822,823efl2)
答案 0 :(得分:0)
仅是字典理解
new_dict = {k:v for k, v in old_dict.items() if my_range[0] < k < my_range[1]}
答案 1 :(得分:0)
从所需的输出中看起来像:
print({i['id']:i['message'] for i in json['values']})
输出:
{'823feb2': 'Merge pull request #1160', '822': 'Merge pull request #1161', '823efl2': 'Merge pull request #1163'}
答案 2 :(得分:0)
您可以使用列表理解功能获得所需的输出-
dict_from_json = json.load(open('/path/to/json'))
>>>dict_from_json
{
"values": [{
"id": "823feb2",
"message": "Merge pull request #1160",
"parents": [{
"id": "822",
"displayId": "4e8a"
},
{
"id": "8c6",
"displayId": "8c6"
}],
"properties": {
"jira-key": ["AN-736"]
}
},
{
"id": "822",
"message": "Merge pull request #1161",
"parents": [{
"id": "823efl2",
"displayId": "4e44a"
},
{
"id": "8c236",
"displayId": "8c2236"
}],
"properties": {
"jira-key": ["AFN-726"]
}
},
{
"id": "823efl2",
"message": "Merge pull request #1163",
"parents": [{
"id": "4e3t3r2d",
"displayId": "4e28a"
},
{
"id": "8cwfd6",
"displayId": "8c4446"
}],
"properties": {
"jira-key": ["AHN-7326"]
}
}]
}
ids = ('823feb2', '823efl2')
output = [{item['id']:item['message']} for item in dict_from_json['values'] if item['id'] in ids]
>>>output
[{'823feb2': 'Merge pull request #1160'},
{'823efl2': 'Merge pull request #1163'}]
答案 3 :(得分:0)
假设您已经有一个dict
In [290]: def get_messages(data, start, end):
...: ret = {}
...: started = False
...: for v in data['values']:
...: if not started:
...: if v['id'] != start:
...: continue
...: else:
...: started = True
...:
...: ret[v['id']] = v['message']
...:
...: if v['id'] == end:
...: break
...:
...: return ret
...:
测试开始完成
In [291]: get_messages(data, '823feb2', '823elf2')
Out[291]:
{'822': 'Merge pull request #1161',
'823efl2': 'Merge pull request #1163',
'823feb2': 'Merge pull request #1160'}
第一至第二项
In [292]: get_messages(data, '823feb2', '822')
Out[292]: {'822': 'Merge pull request #1161', '823feb2': 'Merge pull request #1160'}
第二项到第三项
In [293]: get_messages(data, '822', '823efl2')
Out[293]: {'822': 'Merge pull request #1161', '823efl2': 'Merge pull request #1163'}
最后一项
In [294]: get_messages(data, '823efl2', '823efl2')
Out[294]: {'823efl2': 'Merge pull request #1163'}
start
和end
点不存在
In [295]: get_messages(data, None, None)
Out[295]: {}