如果您对在Python中创建一个新字典和python中创建一个字典的语句感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解在Python中创建一个新字典的各种细节,并对python中创建一个字典的
如果您对在 Python 中创建一个新字典和python中创建一个字典的语句感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解在 Python 中创建一个新字典的各种细节,并对python中创建一个字典的语句进行深入的分析,此外还有关于python – 从两个词典创建一个新列表、python – 从动态字典创建一个矩阵、python – 从字典列表中创建一个非矛盾项的字典、python – 使用另一个字典更新字典,但只能使用非None值的实用技巧。
本文目录一览:- 在 Python 中创建一个新字典(python中创建一个字典的语句)
- python – 从两个词典创建一个新列表
- python – 从动态字典创建一个矩阵
- python – 从字典列表中创建一个非矛盾项的字典
- python – 使用另一个字典更新字典,但只能使用非None值
在 Python 中创建一个新字典(python中创建一个字典的语句)
我想用 Python 构建一个字典。但是,我看到的所有示例都是从列表等实例化字典。..
如何在 Python 中创建一个新的空字典?
答案1
小编典典dict
无参数调用
new_dict = dict()
或者干脆写
new_dict = {}
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 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 – 从动态字典创建一个矩阵
输入:
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]]
解决方法
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 – 从字典列表中创建一个非矛盾项的字典
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 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值等相关内容,可以在本站寻找。
本文标签: