我的字典格式为"site_mame": (side_id, frequency)
:
d=[{'fpdownload2.macromedia.com': (1, 88),
'laposte.net': (2, 23),
'www.laposte.net': (3, 119),
'www.google.com': (4, 5441),
'match.rtbidder.net': (5, 84),
'x2.vindicosuite.com': (6, 37),
'rp.gwallet.com': (7, 88)}]
是否有一种智能方法可以按值过滤字典d,这样我只有频率小于100的那些位置?例如:
d=[{'fpdownload2.macromedia.com': (1, 88),
'laposte.net': (2, 23),
'match.rtbidder.net': (5, 84),
'x2.vindicosuite.com': (6, 37),
'rp.gwallet.com': (7, 88)}]
我不想使用循环,只是寻找智能和有效的解决方案......
答案 0 :(得分:4)
你可以使用字典理解和解包来获得更多的Pythonic结果:
d=[{'fpdownload2.macromedia.com': (1, 88),
'laposte.net': (2, 23),
'www.laposte.net': (3, 119),
'www.google.com': (4, 5441),
'match.rtbidder.net': (5, 84),
'x2.vindicosuite.com': (6, 37),
'rp.gwallet.com': (7, 88)}]
new_data = [{a:(b, c) for a, (b, c) in d[0].items() if c < 100}]
输出:
[{'laposte.net': (2, 23), 'fpdownload2.macromedia.com': (1, 88), 'match.rtbidder.net': (5, 84), 'x2.vindicosuite.com': (6, 37), 'rp.gwallet.com': (7, 88)}]
答案 1 :(得分:1)
您可以使用词典理解来进行过滤:
d = {
'fpdownload2.macromedia.com': (1, 88),
'laposte.net': (2, 23),
'www.laposte.net': (3, 119),
'www.google.com': (4, 5441),
'match.rtbidder.net': (5, 84),
'x2.vindicosuite.com': (6, 37),
'rp.gwallet.com': (7, 88),
}
d_filtered = {
k: v
for k, v in d.items()
if v[1] < 100
}
答案 2 :(得分:0)
你想要的是字典理解。我将用一个不同的例子来展示它:
d = {'spam': 120, 'eggs': 20, 'ham': 37, 'cheese': 101}
d = {key: value for key, value in d.items() if value >= 100}
如果您还没有理解列表推导,那么这可能看起来像您无法维护和调试的魔力,因此我将向您展示如何将其分解为明确的循环语句,您应该能够轻松理解:
new_d = {}
for key, value in d.items():
if value >= 100:
new_d[key] = value
如果你无法弄清楚如何将其转化为理解,只需使用语句版本,直到你学到更多;它有点冗长,但更好的是你可以在头脑中思考代码。
您的问题稍微复杂一些,因为这些值不仅仅是一个数字,而是两个数字的元组(因此您希望在value[1]
上进行过滤,而不是value
)。因为你有一个dict的列表而不仅仅是一个dict(所以你可能需要为列表中的每个dict执行此操作)。当然,我的过滤器测试与您的相同。但希望你能从这里弄明白。