有效地从json对象中追加n个字符串?

时间:2017-04-23 21:48:39

标签: python json string python-3.x

所以我有一个像这样的json对象:

data = [{key1: 123, key2:"this is the first string to concatenate"},
 {key1: 131, key2:"C'est la deuxième chaîne à concaténer"},
 {key1: 152, key2:"this is the third string to concatenate"},
 {key1: 152, key2:"this is the fourth string to concatenate"} ] 

我希望将所有英语key2字符串连接在一起,如:

"this is the first string to concatenate this is the third string to concatenate this is the fourth string to concatenate" 

并基于this问题,我这样做:

all_key2 = " ".join([elem["key2"] for elem in data if langid.classify(elem["key2"])=="english"])

但是,是否可以限制加入列表的项目数量?例如,如果我只想连接最多2个英语key2,该怎么办?这意味着我想要这样的东西:

"this is the first string to concatenate this is the third string to concatenate" 

基本上,一旦我连接了一些最大数量的英语句子,我就不再需要连接了。我可以用for循环这样做:

all_key2 = ""
english_count =0 
data = json.load(json_file)
for p in data: 
    if english_count > 2: 
        break 
    #make it all one big string 
    if langid.classify(p["key2"])=="english": 
        #increment english_count 
        #join here 

但由于性能问题,我想避免for循环......有没有办法实现这个目标?

[编辑] 我之所以不对切换过的列表进行切片是因为生成过滤后的列表需要花费大量时间。我想放置一个最大english_count条件,以便我只生成整个列表的一部分

1 个答案:

答案 0 :(得分:2)

使用for循环而非列表理解可让您提早停止,如下所示:

filtered_list = []
for elem in data:
    if langid.classify(elem["key2"])=="english":
        filtered_list.append(elem["key2"])
        if len(filtered_list) > 2:   # or whatever your max is
            break
result = " ".join(filtered_list)