Python 如何实现,数字 1 到 10,如何通过程序实现[1:{2:3, 4:5},6:{7:8, 9:10}]

2014-05-14 23:28:54 +08:00
 zedde
如题,数字1到10,如何通过程序实现[1:{2:3, 4:5},6:{7:8, 9:10}]
不胜感激~
9020 次点击
所在节点    Python
20 条回复
Muninn
2014-05-14 23:34:35 +08:00
不太理解
zedde
2014-05-14 23:38:29 +08:00
@Muninn 应该是{1:{2:3,4:5},6:{7:8,9:10}} 嵌套字典。
zedde
2014-05-14 23:41:47 +08:00
1-20 类似{1:{2:3, 4:5}, 6:{7:8, 9:10}, 11:{12:13, 14:15}, 16:{17:18, 19:20}}
fdsfsdfsdf3334
2014-05-15 00:06:58 +08:00
# coding=utf-8

t={} #初始化字典

for x in range(1,21):
if x%5==1:
print x
t[x]="{"+str(x+1)+":"+str(x+2)+","+str(x+3)+":"+str(x+4)+"}"




t1= sorted(t.iteritems(), key=lambda d:d[0], reverse = False) #按照键值排序

print t1
fdsfsdfsdf3334
2014-05-15 00:07:38 +08:00
fdsfsdfsdf3334
2014-05-15 00:09:27 +08:00
好像有点问题,你看看能不能用
fdsfsdfsdf3334
2014-05-15 00:14:12 +08:00
print "---------------------------------------------\n\r"
print "t:\n\r"
print t
print t[1]

print "---------------------------------------------\n\r"
print "t1:\n\r"
print t1
print t1[0][1]
kxxoling
2014-05-15 00:44:25 +08:00
我理解你是想通过一个list获取这样的dict,list的长度要能被5整除。
```
l = range(1, 21)
assert len(l)%5 == 0
d = {}
for i in range(0, len(l), 5):
d[l[i]] = {l[i+1]: l[i+2], l[i+3]: l[i+4]}
print d
```
delo
2014-05-15 00:44:43 +08:00
kxxoling
2014-05-15 00:45:56 +08:00
额,v2ex不支持这么加代码。。。不过逻辑不复杂,我就不用gist了,讲究看看吧~
palytoxin
2014-05-15 00:51:17 +08:00
这不是和女神合租的rubyer么,没认错吧
cbsw
2014-05-15 01:02:05 +08:00
一行代码而已
{k:{k+1:k+2, k+3:k+4} for k in [5*i+1 for i in range(4)]}
如果要写成函数,就把最后一个 4 作为参数
kavinyao
2014-05-15 04:31:20 +08:00
In [13]: {i: {j:j+1 for j in [i+1, i+3]} for i in range(1, 20, 5)}
Out[13]: {1: {2: 3, 4: 5}, 6: {7: 8, 9: 10}, 11: {12: 13, 14: 15}, 16: {17: 18, 19: 20}}
daniel7725
2014-05-15 09:30:27 +08:00
```
def test(num):
if num <5:
return None
targe = {}
for i in xrange(1,num,5):
tmp_dict = {str(i):{str(i+1):str(i+2),str(i+3):str(i+4)}}
targe.update(tmp_dict)
return targe
daniel7725
2014-05-15 09:34:51 +08:00
看看v2ex支不支持markdown
```
def test(num):
if num <5:
return None
targe = {}
for i in xrange(1,num,5):
tmp_dict = {str(i):{str(i+1):str(i+2),str(i+3):str(i+4)}}
targe.update(tmp_dict)
return targe
```
wangyongbo
2014-05-15 10:52:41 +08:00
{ x : { x + 1 :x+ 2, x+ 3: x+ 4} for x in range(1, 20, 5)}
wangyongbo
2014-05-15 10:54:08 +08:00
{ x : { i : i + 1 for i in xrange(x+1, x+4, 2)} for x in range(1, 20, 5)}
toctan
2014-05-15 13:00:32 +08:00
Ruby:

(1..20).step(5).reduce({}) { |r, x| r.merge(x => Hash[*(x + 1..x + 4)]) }

or the lazy way:

Hash.new { |h, k| h[k] = Hash[*(k + 1..k + 4)]) }
hanks315
2014-05-15 13:57:40 +08:00
foomorrow
2014-05-15 16:14:46 +08:00
n = 2
dict(map(lambda x:(x,dict(((x+1,x+2),(x+3,x+4)))),[x+1 for x in xrange(0,n*10,5)]))

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/112600

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX