使用lambda的字典中特定键的值?

Value of specific key from a dictionary using lambda?

我有一个产品数组,如下所示 table:

+---------------------------+--------------------------------+--------------------------------+
|    name                   |  review                        | word_count                     |
+---------------------------+--------------------------------+--------------------------------+
|                           |                                | {'and': 5, 'wipes': 1,         |
| Planetwise                |  These flannel wipes are OK,   | 'stink': 1, 'because' : 2, ... |
| Flannel Wipes             |  but in my opinion ...         |                                |
|                           |                                |                                |
+---------------------------+--------------------------------+--------------------------------+
|                           |                                | {'and': 3, 'love': 1,          |
| Planetwise                |  it came early and was not     | 'it': 2, 'highly': 1, ...      |
| Wipes Pouch               |  disappointed. i love ...      |                                |
|                           |                                |                                |
+---------------------------+--------------------------------+--------------------------------+
|                           |                                | {'shop': 1, 'noble': 1,        |
|                           |                                | 'is': 1, 'it': 1, 'as': ...    |
| A Tale of Baby's Days     |  Lovely book, it's bound       |                                |
|  with Peter Rabbit ...    |  tightly so you may no ...     |                                |
|                           |                                |                                |
+---------------------------+--------------------------------+--------------------------------+

基本上 word_count 列包含 dictionary(key : value) 个单词出现 review 列句子。

现在我想建立一个新的列名称 and,它应该包含 word_count 字典中 and 的值,如果 and 作为键存在于 word_count 列,然后是值,如果它不作为键存在,那么 0.

对于前 3 行,新的 and 列看起来像这样:

+------------+
|    and     |
+------------+
|            |
| 5          |
|            |
|            |
+------------+
|            |
| 3          |
|            |
|            |
+------------+
|            |
| 0          |
|            |
|            |
+------------+

我写了这段代码,它运行正常:

def wordcount(x):
    if 'and' in x:
        return x['and']
    else:
        return 0

products['and'] = products['word_count'].apply(wordcount);

我的问题:有什么方法可以使用 lambda 来做到这一点?

到目前为止我所做的是:

products['and'] = products['word_count'].apply(lambda x : 'and' in x.keys());

这 returns 列中只有 01。我可以在上面的行中添加什么,以便 products['and']products['word_count'] 中作为键存在时包含 and 键的值?

我正在使用 ipython notebook 和 graphlab。

你的想法是对的。只是 return x['and'] 的值(如果存在),否则 0

例如:

data = {"word_count":[{"foo":1, "and":5}, 
                      {"foo":1}]}
df = pd.DataFrame(data)
df.word_count.apply(lambda x: x['and'] if 'and' in x.keys() else 0)

输出:

0    5
1    0
Name: word_count, dtype: int64

我不确定 products['word_count'].apply(wordcount) 做了什么,但从你的问题的其余部分来看,虽然你 可以 使用 [=13= 做类似下面的事情]:

products['and'] = (
    lambda p: p['and']['and'] if 'and' in p['and'] else 0)(products)

它有点丑陋和笨拙,所以我建议改用内置字典 get() 方法,因为它经过调试、更短、更易于维护且速度更快:

products['and'] = products['and'].get('and', 0)

你对使用 lambda 的执着让我想起了一些人所说的 Law of the Instrument:“......如果你拥有的唯一工具是锤子,那么你很想把一切都当作如果它是一颗钉子的话。