我有2首字典:
a = {'a':5, 'b':3, 'c':1}
b = {"ca":10, "sd":4, "aa":2}
我想要获得的是:
z = {'a':"ca", 'b':"sd", 'c':"aa"}
我该怎么做?
编辑:
我希望将a的第一个键与b的第一个键匹配,将第二个键与b的第二个键匹配,依此类推。
答案 0 :(得分:0)
试试这个:
fs.readFile('list.txt', function(err, data){
if(err) throw err;
var lines = data.split('\n');
var rand = [Math.floor(Math.random()*lines.length)];
var rlist = lines[rand]
})
答案 1 :(得分:0)
在(现在编辑成含糊不清的)评论中,您建议您考虑的顺序是"频率"。将其解释为按字典值排序的含义,您可以通过压缩按相应值排序的键来创建新的字典:
In [14]: dict(zip(sorted(a, key=a.get), sorted(b, key=b.get)))
Out[14]: {'a': 'ca', 'b': 'sd', 'c': 'aa'}
这是有效的,因为a.get
是一个为我们提供值的方法,因此当我们对a
进行排序(其中迭代在键上)时,我们通过增加值来对它们进行排序。
In [15]: sorted(a, key=a.get)
Out[15]: ['c', 'b', 'a']
但是,这并没有说明在关系的情况下该做什么。为了解决这个问题,您可以将参数排序为sorted
(例如sorted(sorted(a),key=a.get))
)或使用关键函数(例如sorted(a, key=lambda x: (a[x], x))
),以便至少输出是确定性的。
答案 2 :(得分:0)
在这种情况下,您需要使用OrderedDict
来保留订单。这是一个例子:
import collections
import itertools
a = collections.OrderedDict()
b = collections.OrderedDict()
# add the data based on the order that you need
a['a'] = 5
a['b'] = 3
a['c'] = 1
b["ca"] = 10
b["sd"] = 4
b["aa"] = 2
# put them together. I user izip and iterkeys assuming you have a large data set
# also assuming the order in the new dictionary doesn't matter otherwise you have to use OrderedDict again.
z = {i: j for i, j in itertools.izip(a.iterkeys(), b.iterkeys())}
print z
>> {'a': 'ca', 'c': 'aa', 'b': 'sd'}