for循环中的if else语句附加到列表

时间:2017-09-24 07:38:38

标签: python for-loop if-statement pyspark append

我无法理解为什么列表不会附加在pyspark中。有人可以看看我的代码吗?

import json

input_file = sc.textFile("data.json")

def extract_func(data):
    c_list = []
    neighborhoods = data.get('neighborhoods', None)

    for n in neighborhoods:
        if n == []:
            c_list.append('Unknown')
        else:
            c_list.append(n)

    return c_list

示例数据输入:

{'attributes': {'Accepts Credit Cards': True,
 'city': 'Edinburgh',
 'name': 'Conan Doyle',
 'neighborhoods': [],
 'stars': 3.5,
 'state': 'EDH'}}

此示例条目没有显示邻域,因此我想在列表中附加“unknown”。其他一些数据条目有多个邻域,所以我想通过for循环单独附加它们。

当我运行dat = input_file.map(lambda line: json.loads(line))后跟dat = dat.flatMap(extract_func)时,它不会给我Unknown个邻居条目。

检查几个小时,无法弄清楚出了什么问题,我在这里错过了什么?

1 个答案:

答案 0 :(得分:1)

如果if n == []: 包含一个空列表,

True只会到达并评估为neighborhoods,但当它自身为空时则不会评估。{p> neighborhoods = data.get("neighborhoods") if neighborhoods: c_list = ["Unknown" if n == [] else n for n in neighborhoods] else: c_list = ["Unknown"] 您可以将代码简化为:

c_list = (["Unknown" if n == [] else n for n in neighborhoods] if neighborhoods
          else ["Unknown"])

或使用条件表达式:

d = {'Engine': u'2.0 TSI MLB', 'Category': 'Category', 'Installation': 'Installation', 'Features': 'Features', 'Title': 'Title', 'Recommended Software': 'Recommended Software', 'UniCONNECT+': 'UniCONNECT+', 'Make': u'AUDI', 'Price': 'Price', 'Stock Power': 'Stock Power', 'Desctiption': 'Description', 'Related Hardware': 'Related Hardware', 'Year': u'2018', 'Hardware Included': 'Hardware Included', 'Model': u'A4', 'Product Type': 'Product Type', 'LB-FT': 'LB-FT', 'HP': 'HP', 'Octane': 'Octane', 'Media1': 'Media1'}