GVKun编程网logo

在 Python 中创建一个新字典(python中创建一个字典的语句)

8

如果您对在Python中创建一个新字典和python中创建一个字典的语句感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解在Python中创建一个新字典的各种细节,并对python中创建一个字典的

如果您对在 Python 中创建一个新字典python中创建一个字典的语句感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解在 Python 中创建一个新字典的各种细节,并对python中创建一个字典的语句进行深入的分析,此外还有关于python – 从两个词典创建一个新列表、python – 从动态字典创建一个矩阵、python – 从字典列表中创建一个非矛盾项的字典、python – 使用另一个字典更新字典,但只能使用非None值的实用技巧。

本文目录一览:

在 Python 中创建一个新字典(python中创建一个字典的语句)

在 Python 中创建一个新字典(python中创建一个字典的语句)

我想用 Python 构建一个字典。但是,我看到的所有示例都是从列表等实例化字典。..

如何在 Python 中创建一个新的空字典?

答案1

小编典典

dict无参数调用

new_dict = dict()

或者干脆写

new_dict = {}

python – 从两个词典创建一个新列表

python – 从两个词典创建一个新列表

这是一个关于 Python的问题.我有以下词典列表:

listA = [
          {"t": 1,"tid": 2,"gtm": 3,"c1": 4,"id": "111"},{"t": 3,"tid": 4,"c2": 5,"id": "222"},{"t": 1,"id": "333"},{"t": 5,"tid": 6,"id": "444"}
        ]

和我想要比较的词典:

dictA = {"t": 1,"gtm": 3}

我想创建一个与listA中dictA中的所有项匹配的dicts列表,并包含“id”字段:

listB = [
          {"t": 1,"id": "333"}
        ]

我试过这样做:

for k in listA:
    for key,value in k.viewitems() & dictA.viewitems():
        print key,value

但它匹配dictA中的任何项目.

解决方法

您需要检查交叉口的长度,只需检查dct.viewitems()&对于任何交叉点,dictA.viewitems()将评估为True:

[dct for dct in listA if len(dct.viewitems() & dictA.viewitems()) == len(dictA)]

或者只检查一个子集,如果来自dictA的项目是每个dict的subset:

[dct for dct in listA if dictA.viewitems() <= dct.viewitems()]

或者反转寻找superset的逻辑:

[dct for dct in listA if dct.viewitems() >= dictA.viewitems()]

python – 从动态字典创建一个矩阵

python – 从动态字典创建一个矩阵

我想创建一个矩阵.

输入:

data = [
    {'a': 2,'g': 1},{'p': 3,'a': 5,'cat': 4}
    ...
]

输出:

a  p  cat  g
1st  2  0  0    1
2nd  5  3  4    0

这是我的代码.但是,当数据量巨大时,我认为它并不聪明且非常慢.

有什么好方法可以做到这一点吗?

谢谢.

data = [
    {'a': 2,'cat': 4}
]

### Get keyword map ###
key_map = set()
for row in data:
    key_map = key_map.union(set(row.keys()))

key_map = list(key_map)    # ['a','p','g','cat']

### Create matrix ###
result = []
for row in data:
    matrix = [0] * len(key_map)
    for k,v in row.iteritems():
        matrix[key_map.index(k)] = v
    result.append(matrix)

print result        

# [[2,1],[5,3,4,0]]

编辑

通过@wwii建议.使用Pandas看起来不错:

from pandas import DataFrame

result = DataFrame(data,index=range(len(data)))
print result.fillna(0,downcast=int).as_matrix().tolist()
# [[2,1,0],3]]

解决方法

我使用Pandas数据帧得到了第二个答案.但是,我的代码应该比你的代码简单一些.

In [1]: import pandas as pd

In [5]: data = [{'a': 2,'cat': 4}]

In [6]: df = pd.DataFrame(data)

In [7]: df
Out[7]: 
   a  cat   g   p
0  2  NaN   1 NaN
1  5    4 NaN   3

In [9]: df = df.fillna(0)

In [10]: df
Out[10]: 
   a  cat  g  p
0  2    0  1  0
1  5    4  0  3

我在iPython中编写了我的编码,我强烈推荐!

要保存到csv,只需使用额外的代码行:

df.to_csv('filename.csv')

python – 从字典列表中创建一个非矛盾项的字典

python – 从字典列表中创建一个非矛盾项的字典

这个问题的灵感来自 this question.我想从字典列表中获取一个字典,该字典应该包含所有字典中的所有键/值对,这些字典只包含一次,或者所有字典都对相关值达成一致.示例(摘自上述帖子):

dicts = [dict(a=3,b=89,d=2),dict(a=3,c=99),b=42,c=33)]
print dict_itersection(dicts)

应该屈服

{'a': 3,'d': 2}

我目前的实现如下:

import collections

def dict_intersection(dicts):
        c=collections.defaultdict(set)
        for d in dicts:
                for a,b in d.iteritems():
                        c[a].add(b)
        return {a: next(iter(b)) for a,b in c.iteritems() if len(b) == 1}

所以我的问题是:这可以更优雅地完成吗?

Sidequestion:可以在不修改基础字典(即不是b.pop())的情况下更好地完成(iter(b))吗?

解决方法

到目前为止,所有解决方案都假设所有字典值都是可清如果没有这个假设,代码不会变慢,只会变得更复杂,我会放弃它.这是一个适用于所有支持的值的版本!=:

def dict_intersection(dicts):
    result = {}
    conflicting = set()
    for d in dicts:
        for k,v in d.iteritems():
            if k not in conflicting and result.setdefault(k,v) != v:
                del result[k]
                conflicting.add(k)
    return result

设置冲突只包含字典键,它始终是可清除的.

python – 使用另一个字典更新字典,但只能使用非None值

python – 使用另一个字典更新字典,但只能使用非None值

从python documentation我看到dict有一个更新(…)方法,但它似乎没有异常,我可能不想用新值更新旧字典.例如,当值为None时.

这就是我目前所做的事情:

for key in new_dict.keys():
  new_value = new_dict.get(key)
  if new_value: old_dict[key] = new_value

有没有更好的方法来使用新词典更新旧词典.

最佳答案
你可以使用类似的东西:

old = {1: 'one',2: 'two'}
new = {1: 'newone',2: None,3: 'new'}

old.update( (k,v) for k,v in new.iteritems() if v is not None)

# {1: 'newone',2: 'two',3: 'new'}

关于在 Python 中创建一个新字典python中创建一个字典的语句的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于python – 从两个词典创建一个新列表、python – 从动态字典创建一个矩阵、python – 从字典列表中创建一个非矛盾项的字典、python – 使用另一个字典更新字典,但只能使用非None值等相关内容,可以在本站寻找。

本文标签: