筛选字典以包含另一个字典中满足特定条件的值

时间:2019-05-08 04:59:57

标签: python twitter

我正在尝试创建一个新字典,该字典仅从另一个字典中过滤出包含50个或更多字符的推文的值。我不知道该用什么来添加新的字典

我尝试使用.update,但这似乎只是在for循环之后将最后的tweet添加到新字典中

def is_short_tweet(tweet):
    if len(tweet) < 50:
        return True
    else:
        return False

1_filtered = dict()

for i in 1_tweets: 
    if not is_short_tweet(i["text"]):
        1_filtered.update(i) """ what do I use here to add to the new, filtered dict?"""

2 个答案:

答案 0 :(得分:1)

您始终可以使用dict理解来进行过滤:

d = {1:'a'*49, 2:'b'*50, 3:'c'*51}
#{1: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
# 2: 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
# 3: 'ccccccccccccccccccccccccccccccccccccccccccccccccccc'}

filtered = {k: v for k, v in d.items() if len(v)>=50}

输出:

{2: 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
 3: 'ccccccccccccccccccccccccccccccccccccccccccccccccccc'}

答案 1 :(得分:0)

假设tweets变量是字典列表,而不是一个字典。 (根据您显示的代码,这对我来说没有任何意义。)

您说过要保持多个鸣叫 s ,且长度超过50个字符,因此您可能希望使用词典列表

def is_short_tweet(tweet):
    if len(tweet) < 50:
        return True
    else:
        return False

filtered = []  # define filtered as a list, instead of dictionary

for i in tweets: 
    if not is_short_tweet(i["text"]):
        filtered.append(i)  # use append() to add i (which is a dictionary ) to the list

有关.update()词典方法的说明:

  

如果键不在字典中,则update()方法将元素添加到字典中。如果键在字典中,则会使用新值更新键。

由于每个推文都具有相同的键,所以您要做的是使用找到的最新长推文来更新此信息。