Quantcast
Channel: User martineau - Stack Overflow
Viewing all articles
Browse latest Browse all 44

Answer by martineau for Shuffle a dictionary and list in unison?

$
0
0

Since test_list simply contains the values in test_dict, you can shuffle it and then recreate the former from the results of the latter.

Note that if this correspondence between the two variables exists, having test_list is redundant — it's just list(test_dict.values()).

from collections import dequefrom pprint import pprintfrom random import shuffletest_dict = {3.0: deque([0.897, 24, 45]),             2.0: deque([0.0, 0.5, 56]),             9.0: deque([3.4, 0.9, 0.5])}test_list = [deque([0.897, 24, 45]),             deque([0.0, 0.5, 56]),             deque([3.4, 0.9, 0.5])]print('Before:')pprint(test_dict, sort_dicts=False)print('----')pprint(test_list, width=40)items = list(test_dict.items())shuffle(items)test_dict = dict(items)test_list = list(test_dict.values())print('\nAfter:')pprint(test_dict, sort_dicts=False)print('----')pprint(test_list, width=40)

Results:

Before:{3.0: deque([0.897, 24, 45]), 2.0: deque([0.0, 0.5, 56]), 9.0: deque([3.4, 0.9, 0.5])}----[deque([0.897, 24, 45]), deque([0.0, 0.5, 56]), deque([3.4, 0.9, 0.5])]After:{9.0: deque([3.4, 0.9, 0.5]), 3.0: deque([0.897, 24, 45]), 2.0: deque([0.0, 0.5, 56])}----[deque([3.4, 0.9, 0.5]), deque([0.897, 24, 45]), deque([0.0, 0.5, 56])]

P.S. An even shorter way to do it would be to use random.sample() instead of shuffle():

test_dict = dict(random.sample(test_dict.items(), k=len(test_dict)))test_list = list(test_dict.values())

Viewing all articles
Browse latest Browse all 44

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>