如何从列表或numpy数组构造一个字典?

时间:2014-07-10 20:08:07

标签: python

你能教我从名单中构建一个词典吗?

我有两个清单:

A = [1, 2, 0, 0, 3]

B = ['HAM', 'SPAM', 'HAM', 'HAM', 'SPAM']

我想要一个这样的字典:

Dict = [
...     {'Count': 1., 'Class': 'HAM'},
...     {'Count': 2., 'Class': 'SPAM'},
...     {'Count': 0., 'Class': 'HAM'},
...     {'Count': 0., 'Class': 'HAM'},
...     {'Count': 3., 'Class': 'SPAM'},
... ]

其中包括两个功能键“Count”和“Class”......

非常感谢!感谢。

4 个答案:

答案 0 :(得分:2)

这不是一个词典,而是一个词典(词典)。无论如何,如果你想要的是这个:

data = [
            {'Count': 1., 'Class': 'HAM'},
            {'Count': 2., 'Class': 'SPAM'},
            {'Count': 0., 'Class': 'HAM'},
            {'Count': 0., 'Class': 'HAM'},
            {'Count': 3., 'Class': 'SPAM'}
       ]

然后:

data = [{'Count': float(x[0]), 'Class': x[1]} for x in zip(A, B)]

<强>更新

我已经更新了我的答案,因为我刚注意到你需要一个浮动作为'计数'的值。

答案 1 :(得分:1)

>>> A = [1, 2, 0, 0, 3]
>>> B = ['HAM', 'SPAM', 'HAM', 'HAM', 'SPAM']

>>> zip(A,B)
[(1, 'HAM'), (2, 'SPAM'), (0, 'HAM'), (0, 'HAM'), (3, 'SPAM')]

>>> [{'Count':i[0], 'Class':i[1]} for i in zip(A,B)]

输出

[{'Count': 1, 'Class': 'HAM'},
 {'Count': 2, 'Class': 'SPAM'},
 {'Count': 0, 'Class': 'HAM'},
 {'Count': 0, 'Class': 'HAM'},
 {'Count': 3, 'Class': 'SPAM'}]

答案 2 :(得分:1)

你所拥有的Dict = [{}, {}, ...]构造不是dict,而是一个dicts([])列表({})。

使用ziplist comprehension获取所需结果:

>>> A = [1, 2, 0, 0, 3]
>>> B = ['HAM', 'SPAM', 'HAM', 'HAM', 'SPAM']

>>> [{'Count': a, 'Class': b} for a, b in zip(A, B)]
[{'Count': 1, 'Class': 'HAM'},
 {'Count': 2, 'Class': 'SPAM'},
 {'Count': 0, 'Class': 'HAM'},
 {'Count': 0, 'Class': 'HAM'},
 {'Count': 3, 'Class': 'SPAM'}]

答案 3 :(得分:1)

您可以使用pandas

代替词典列表(即记录)

pandas非常适合代表此类数据。

df = pd.DataFrame({ 'Count': A, 'Class': B})
df
=> 
  Class  Count
0   HAM      1
1  SPAM      2
2   HAM      0
3   HAM      0
4  SPAM      3

[5 rows x 2 columns]

df.Class
=>
0     HAM
1    SPAM
2     HAM
3     HAM
4    SPAM
Name: Class, dtype: object

df.Class[1]
=> 'SPAM'

df.ix[1]
=>
Class    SPAM
Count       2
Name: 1, dtype: object

df.ix[1].Class
=> 'SPAM'