我遇到许多任务,需要过滤 python (2.7) 列表以仅保留有序的唯一值。我通常的方法是使用odereddictfrom 集合:
from collections import OrderedDict
ls = [1,2,3,4,1,23,4,12,3,41]
ls = OrderedDict(zip(ls,['']*len(ls))).keys()
print ls
Run Code Online (Sandbox Code Playgroud)
输出是:
[1,2,3,4,23,12,41]
有没有其他最先进的方法可以在Python中做到这一点?
list编辑- 方法的比较可以在这里找到: https: //www.peterbe.com/plog/uniqifiers-benchmark
同时最好的解决方案是:
def get_unique(seq):
seen = set()
seen_add = seen.add
return [x for x in seq if not (x in seen or seen_add(x))]
Run Code Online (Sandbox Code Playgroud) 我很好奇集合库中的 OrderedDict如何保持密钥/对顺序?我在网上看了一圈,找不到答案。
我正在尝试创建一个嵌套的 Json 结构,如下所示:
示例 Json:
{
"id" : "de",
"Key" : "1234567",
"from" : "test@test.com",
"expires" : "2018-04-25 18:45:48.3166159",
"command" : "method.exec",
"params" : {
"method" : "cmd",
"Key" : "default",
"params" : {
"command" : "testing 23"
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试从 OrderedDict 中执行此操作。我不确定构造 OrderedDict 以便生成正确的 Json 的正确方法。
Python代码:
json_payload = OrderedDict(
[('id', id),
('Key', keystore),
('from', 'test@test.com'),
('expires', expires),
('command', 'method.exec')]
# What goes here for the params section??
)
print json.dumps(json_payload, indent=4, default=str)
Run Code Online (Sandbox Code Playgroud) 我想保存最好的模型,然后在测试期间加载它。所以我使用了以下方法:
def train():
#training steps …
if acc > best_acc:
best_state = model.state_dict()
best_acc = acc
return best_state
Run Code Online (Sandbox Code Playgroud)
然后,在我使用的主函数中:
model.load_state_dict(best_state)
Run Code Online (Sandbox Code Playgroud)
恢复模型。
但是,我发现 best_state 总是与训练时的最后一个状态相同,而不是最佳状态。有谁知道原因以及如何避免它?
顺便说一下,我知道我可以使用torch.save(the_model.state_dict(), PATH)然后通过
the_model.load_state_dict(torch.load(PATH)). 但是,我不想将参数保存到文件中,因为训练和测试函数在一个文件中。
给定一个有序字典,我想获取索引 0 处的键。我当然可以执行一个循环,获取第一次迭代的键并立即跳出循环。但我想知道是否有办法直接做到这一点?我的 Google-Fu 没有发现任何东西,在黑暗中的一些拍摄也失败了。我尝试过类似的事情
$hash[0].Name
Run Code Online (Sandbox Code Playgroud)
和
$hash.GetEnumerator()[0].Name
Run Code Online (Sandbox Code Playgroud)
我发现了关于在 C# 中执行此操作的讨论,这导致了这个
[System.Collections.DictionaryEntry]$test.Item(0).Key
Run Code Online (Sandbox Code Playgroud)
但这也失败了。这只是无法完成的事情,还是我走错了路?
我正在尝试使用OrderedDict(Raymond Hettingers 版本为pre2.7 Python),其中我的键是日期.但是它没有正确排序,我想它可能是根据ID进行排序.
有没有人对如何做到这一点有任何建议?
我通过导入集合创建了一个python Ordered Dictionary并将其存储在名为'filename.txt'的文件中.文件内容看起来像
OrderedDict([(7, 0), (6, 1), (5, 2), (4, 3)])
Run Code Online (Sandbox Code Playgroud)
我需要从另一个程序中使用这个OrderedDict.我这样做
myfile = open('filename.txt','r')
mydict = myfile.read()
Run Code Online (Sandbox Code Playgroud)
我需要获得类型的'mydict'
<class 'collections.OrderedDict'>
Run Code Online (Sandbox Code Playgroud)
但在这里,它出现了'str'类型.
有没有办法在python中将字符串类型转换为OrderedDict类型?使用python 2.7
OrderedDict是一个保留项目顺序的集合(插入它们的顺序).我不认为这可以通过哈希表实现(我认为常规字典使用)所以用于实现它的平衡树是什么?
我假设有许多依赖,如Python 2/3和CPython/IPython/others.
我的哈希表包含(key,Values [])
例如:
myHashtable[keys, Values[]]
myHashtable.Add[1, Value1];
myHashtable.Add[2, Value2];
myHashtable.Add[3, Value3];
myHashtable.Add[4, Value4];
myHashtable.Add[5, Value5];
Run Code Online (Sandbox Code Playgroud)
哪里有Value1; Value2,value3,value4和value5如下.
Value1[name = "Smith"]
Value1[Title= "Mr"]
Value1[Salary = 1000]
Value1[Identity = "S"]
Value2[name = "Peter"]
Value2[Title= "Mr"]
Value2[Salary = 1000]
Value2[Identity = "A"]
Value3[name = "Tom"]
Value3[Title= "Mr"]
Value3[Salary = 1000]
Value3[Identity = "C"]
Value4[name = "Marry"]
Value4[Title= "Ms"]
Value4[Salary = 1000]
Value4[Identity = ""]
Value5[name = "Sam"]
Value5[Title= "Mr"]
Value5[Salary = 1000]
Value5[Identity = "C"]
Run Code Online (Sandbox Code Playgroud)
我想订购这个dictionaryEntry列表值,其中"C"值首先是"A",然后是"S",然后是""
排序结果后,结果如下.
myHashtable.Add[3, Value3]; // Value3.Identity = "C" …Run Code Online (Sandbox Code Playgroud) 我有一份命令字典。我想将所有这些组合在一起,然后按每个中的fruit属性对其进行排序。我一直在通过下面的代码使用defaultdict对它们进行组合和排序。
super_dict_apple = defaultdict(list)
super_dict_orange = defaultdict(list)
super_dict_no_fruit = defaultdict(list)
for d in dict:
if 'fruit' not in d:
for k, v in d.iteritems():
super_dict_no_fruit[k].append(v)
elif d['fruit'] == 'Apple':
for k, v in d.iteritems():
super_dict_apple[k].append(v)
elif d['fruit'] == 'orange':
for k, v in d.iteritems():
super_dict_orange[k].append(v)
Run Code Online (Sandbox Code Playgroud)
这样我得到了一个键和所有相关的值,但是我失去了原始顺序。因此,我尝试使用orderDict来执行此操作,但是我无法使其正常工作,以下是我尝试过的操作。
from collections import OrderedDict
order_dict_no_fruit = OrderedDict()
order_dict_apple = OrderedDict()
order_dict_orange = OrderedDict()
for d in dict:
if 'fruit' not in d:
for k, v in d.iteritems():
order_dict_no_fruit[k].append(v)
elif d['fruit'] == 'Apple':
for k, …Run Code Online (Sandbox Code Playgroud) python ordereddictionary data-structures defaultdict dictionary-missing
python ×8
dictionary ×3
list ×2
c# ×1
date ×1
datetime ×1
defaultdict ×1
icomparer ×1
json ×1
parsing ×1
powershell ×1
python-2.7 ×1
pytorch ×1
set ×1
string ×1