Python 2.7 字典:值为列表类型的唯一相对值
我得到word2vec_basic.py的输出,格式如下 最靠近键1的节点:节点1、节点2、节点3。。 最靠近键2的节点:节点2、节点4、节点5 这意味着node2比key1更接近key2(如果我错了,请纠正我,因为我是这里的新手) 如果我得到以下格式的输出就太好了 最靠近键1的节点:节点1、节点3、节点6。。 最靠近键2的节点:节点2、节点4、节点5Python 2.7 字典:值为列表类型的唯一相对值,python-2.7,dictionary,nlp,tensorflow,text-classification,Python 2.7,Dictionary,Nlp,Tensorflow,Text Classification,我得到word2vec_basic.py的输出,格式如下 最靠近键1的节点:节点1、节点2、节点3。。 最靠近键2的节点:节点2、节点4、节点5 这意味着node2比key1更接近key2(如果我错了,请纠正我,因为我是这里的新手) 如果我得到以下格式的输出就太好了 最靠近键1的节点:节点1、节点3、节点6。。 最靠近键2的节点:节点2、节点4、节点5 即,只考虑最接近的邻居进行聚类。 同样的建议 我正在维护一个python字典,其格式如下: { key1: [node1,node2,node3
即,只考虑最接近的邻居进行聚类。 同样的建议
我正在维护一个python字典,其格式如下:{
key1: [node1,node2,node3],
key2: [node2,node4,node5]
}
但我要求,
{
key1: [node1,node3,node6],
key2: [node2,node4,node5]
}
对于上面的字典,我需要
Nearest to key1 : node1, node3 , node6..
Nearest to key2 : node2, node4, node5 ..
我们可以在tensorflow本身中这样做吗,或者我应该定义一个以字典作为输入并提供所需输出的函数吗
例如:
如果我们有以下格式的python字典:
{
a: ["abc","bcd","def"],
b: ["def","xyz"]
}
这里列出了这些值。我正在从上述输入中查找以下格式:
{
a: ["abc","bcd"],
b: ["def","xyz"]
}
欢迎就如何实现这一目标提出建议
另外,是否有任何python内置函数可以帮助我达到上述输出格式 DICT是无序的,因此不保证删除哪个dupe,但您可以在迭代项时保留一组元素,如果已经看到,则更新/删除列表/值中的元素:
这可能会产生:
{'b': ['def', 'xyz'], 'a': ['abc', 'bcd']}
或:
这完全取决于你先按哪个键
正如您在436次投票中所看到的,删除逻辑是有效的,如果需要,它会保持顺序。为了避免每次都像在链接中一样进行set.add查找,您可以设置
seen\u add=seen.add
并使用seen.\u add(ele)
代替seen.add
因为Python中的字典条目是无序的,所以您需要首先构建一个由记录每个列表(或序列)的节点键入的单独字典它和它的索引都在那个列表中,所以每个列表中的相对距离可以相互比较。完成后,可以通过第二次遍历字典的内容来引用它,以确定每个节点是否应该保留在它所在的每个列表中
d = {
"a": ["abc", "bcd", "def"],
"b": ["def", "xyz"]
}
def check_usage(k, elem_usage):
if len(elem_usage) == 1: # unique?
return True
else:
index = elem_usage[k] # within this elem's seq
for key,value in elem_usage.items():
if key != k:
if value < index:
return False
else:
return True
usage = {}
for key in d: # build usage dictionary
for index, item in enumerate(d[key]):
usage.setdefault(item, {})[key] = index
for k,seq in d.items():: # remove nodes that are closer in other lists
d[k] = [elem for elem in seq if check_usage(k, usage[elem])]
# display results
print('{')
for k in sorted(d):
print(' {!r}: {},'.format(k, d[k]))
print('}')
为什么不从b中删除def?为什么不将“def”保留在
a
中,并从b
中删除-与您正试图实现的目标相关的值?特别不清楚的是,因为您没有包含任何可能提供额外线索的代码。我编辑了我的问题,以解释它是如何需要的。您的更新有助于澄清您想要做什么,我已根据它提交了答案。请尝试一下,并提供一些反馈。与上面的问题相关:要实现这一点,您需要依赖python语言(实现)的两个模糊属性。为什么不把你的代码分成3行,这是任何一个计算机科学专业一年级学生都能理解的?@BiRico,你对高效代码的使用投了反对票,做得好。OP要求一种方法,我提供了。我应该增加一种效率较低的方法吗?@Padraiccningham谢谢!那看起来不错。。我也在探索tensorflow,如果我们能在word2vec_basic中实现的话(我已经更新了我的问题,说明了我是如何使用它的)…尽管你的解决方案同样不错!再次感谢!
d = { "a": ["abc","bcd","def"], "b": ["xyz"]}
d = {
"a": ["abc", "bcd", "def"],
"b": ["def", "xyz"]
}
def check_usage(k, elem_usage):
if len(elem_usage) == 1: # unique?
return True
else:
index = elem_usage[k] # within this elem's seq
for key,value in elem_usage.items():
if key != k:
if value < index:
return False
else:
return True
usage = {}
for key in d: # build usage dictionary
for index, item in enumerate(d[key]):
usage.setdefault(item, {})[key] = index
for k,seq in d.items():: # remove nodes that are closer in other lists
d[k] = [elem for elem in seq if check_usage(k, usage[elem])]
# display results
print('{')
for k in sorted(d):
print(' {!r}: {},'.format(k, d[k]))
print('}')