René's URL Explorer Experiment


Title: Possibility to set constraints of list of dict data? · python-constraint/python-constraint · Discussion #90 · GitHub

Open Graph Title: Possibility to set constraints of list of dict data? · python-constraint/python-constraint · Discussion #90

X Title: Possibility to set constraints of list of dict data? · python-constraint/python-constraint · Discussion #90

Description: Possibility to set constraints of list of dict data?

Open Graph Description: Hello, I am trying to solve a product csp-problem with python constraint. For the sake of it. Let's say that my data looks as following. front_frame = [ {"size": [40, 50], "color": ["green"]}, {"si...

X Description: Hello, I am trying to solve a product csp-problem with python constraint. For the sake of it. Let's say that my data looks as following. front_frame = [ {"size": [40, 50], "color...

Opengraph URL: https://github.com/python-constraint/python-constraint/discussions/90

X: @github

direct link

Domain: patch-diff.githubusercontent.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"QAPage","mainEntity":{"@type":"Question","name":"Possibility to set constraints of list of dict data?","text":"

Hello,
\nI am trying to solve a product csp-problem with python constraint.
\nFor the sake of it. Let's say that my data looks as following.

\n
front_frame = [\n{\"size\": [40, 50], \"color\": [\"green\"]},\n{\"size\": [60], \"color\": [\"blue\", \"red\"]]\n]\n\nback_frame = [\n{\"size\": [50, 60], \"color\": [\"green\"]},\n{\"size\": [30, 40], \"color\": [\"blue\", \"red\"]]\n\nproblem = Problem()\nproblem.addVariable(\"frame\", frame)\nproblem.addVariable(\"wheel\", wheel)\n
\n

I am looking for a way to express that the size of the front_frame must be equal to the back_frame.
\nAs in:
\nif size = 30, no solution
\nif size = 40, then front_frame = {\"size\": [40, 50], \"color\": [\"green\"]}, back_frame = {\"size\": [30, 40], \"color\": [\"blue\", \"red\"]]
\nif size = 50, then front_frame = {\"size\": [40, 50], \"color\": [\"green\"]}, back_frame = {\"size\": [50, 60], \"color\": [\"green\"]}
\nif size = 60, then front_frame = {\"size\": [60], \"color\": [\"blue\", \"red\"]], back_frame = {\"size\": [50, 60], \"color\": [\"green\"]}

\n

Would this be possible when using python-constraint?

","upvoteCount":1,"answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"

Hi Sebastian, that's definitely possible. If possible I would recommend not nesting variables you want to constraint in dictionaries, because it complicates things - I've given an alternative below. However, let's first solve it the way you provided it.
\nWe start by defining the two variables, the front and back frames.

\n
from constraint import Problem\nproblem = Problem()\nproblem.addVariable(\"front\", [\n    {\"size\": [40, 50], \"color\": [\"green\"]},\n    {\"size\": [60], \"color\": [\"blue\", \"red\"]}\n])\nproblem.addVariable(\"back\", [\n    {\"size\": [50, 60], \"color\": [\"green\"]},\n    {\"size\": [30, 40], \"color\": [\"blue\", \"red\"]}\n])\n
\n

Next, we add the constraint and get the solutions:

\n
def equal_size(front, back):\n    return any(size in front[\"size\"] for size in back[\"size\"])\n\nproblem.addConstraint(equal_size, (\"front\", \"back\"))\nprint(problem.getSolutions())\n
\n

Running this results in the following list, corresponding to the answer you provided:

\n
[{'back': {'size': [30, 40], 'color': ['blue', 'red']}, 'front': {'size': [40, 50], 'color': ['green']}}, \n{'back': {'size': [50, 60], 'color': ['green']}, 'front': {'size': [60], 'color': ['blue', 'red']}}, \n{'back': {'size': [50, 60], 'color': ['green']}, 'front': {'size': [40, 50], 'color': ['green']}}]\n
\n

While this solves your issue, it is a bit more cumbersome because you're already providing half of the solution yourself and doesn't get you the full benefit of the solver. The more natural approach is to think of constraint solvers as defining all possible combinations of values (a Cartesian product) and using the constraints to get the combinations that are actually possible. In your case that means a three-dimensional grid of frame, size, and color, something like this:

\n
problem = Problem()\nproblem.addVariable(\"frame\", [\"front\", \"back\"])\nproblem.addVariable(\"size\", [30, 40, 50, 60])\nproblem.addVariable(\"color\", [\"green\", \"blue\", \"red\"])\n
\n

On which you define the following constraints:

\n
def actual_values(frame, size, color):\n    if frame == \"front\":\n        if color == \"green\":\n            return size == 40 or size == 50\n        else:\n            return size == 60\n    else:\n        if color == \"green\":\n            return size == 50 or size == 60\n        else:\n            return size == 30 or size == 40\n\nproblem.addConstraint(actual_values, (\"frame\", \"size\", \"color\"))\n
\n

Of course you can then repackage the solutions into your dictionary format.
\nI hope this provides an answer to your question, feel free to ask further questions or reopen if necessary.

","upvoteCount":1,"url":"https://github.com/python-constraint/python-constraint/discussions/90#discussioncomment-12338386"}}}

route-pattern/_view_fragments/Voltron::DiscussionsFragmentsController/show/:user_id/:repository/:discussion_number/discussion_layout(.:format)
route-controllervoltron_discussions_fragments
route-actiondiscussion_layout
fetch-noncev2:9c293b02-1290-e185-78f5-72378ce3f84e
current-catalog-service-hash9f0abe34da433c9b6db74bffa2466494a717b579a96b30a5d252e5090baea7be
request-idD28A:31BFB5:41AE47:5C6D77:696E543F
html-safe-nonce86b58c0085945a6c4f7cc7ed4b8ce4a7773256ca3b60b25ce2799e974de1079c
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMjhBOjMxQkZCNTo0MUFFNDc6NUM2RDc3OjY5NkU1NDNGIiwidmlzaXRvcl9pZCI6IjYyMTg0ODA5NTU0NzE4NDQ0MTUiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmacd17eb688e6887b64c8b974dddb96ed2df4f16744d4370b98f5162b0ecc0bbcdc
hovercard-subject-tagdiscussion:7927855
github-keyboard-shortcutsrepository,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/discussions_fragments/discussion_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/Voltron::DiscussionsFragmentsController/show/python-constraint/python-constraint/90/discussion_layout
twitter:imagehttps://opengraph.githubassets.com/a5bf847c3b3776e7dee64ea32fe4370790d5f91f7a17d7142c4b2ca1b1279274/python-constraint/python-constraint/discussions/90
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/a5bf847c3b3776e7dee64ea32fe4370790d5f91f7a17d7142c4b2ca1b1279274/python-constraint/python-constraint/discussions/90
og:image:altHello, I am trying to solve a product csp-problem with python constraint. For the sake of it. Let's say that my data looks as following. front_frame = [ {"size": [40, 50], "color": ["green"]}, {"si...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Nonef68b42d371252b0f236260d6234f4304a806fe5ac43d59faa21fb59d80df103b
turbo-cache-controlno-preview
go-importgithub.com/python-constraint/python-constraint git https://github.com/python-constraint/python-constraint.git
octolytics-dimension-user_id14961635
octolytics-dimension-user_loginpython-constraint
octolytics-dimension-repository_id43628779
octolytics-dimension-repository_nwopython-constraint/python-constraint
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id43628779
octolytics-dimension-repository_network_root_nwopython-constraint/python-constraint
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release6b74bc8dbcd10b5d69fd9ee9d2cfdc8b35e18a4c
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90#start-of-content
https://patch-diff.githubusercontent.com/
Sign in https://patch-diff.githubusercontent.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython-constraint%2Fpython-constraint%2Fdiscussions%2F90
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub SparkBuild and deploy intelligent appshttps://github.com/features/spark
GitHub ModelsManage and compare promptshttps://github.com/features/models
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://patch-diff.githubusercontent.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython-constraint%2Fpython-constraint%2Fdiscussions%2F90
Sign up https://patch-diff.githubusercontent.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fdiscussions_fragments%2Fdiscussion_layout&source=header-repo&source_repo=python-constraint%2Fpython-constraint
Reloadhttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
Reloadhttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
Reloadhttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
python-constraint https://patch-diff.githubusercontent.com/python-constraint
python-constrainthttps://patch-diff.githubusercontent.com/python-constraint/python-constraint
Notifications https://patch-diff.githubusercontent.com/login?return_to=%2Fpython-constraint%2Fpython-constraint
Fork 71 https://patch-diff.githubusercontent.com/login?return_to=%2Fpython-constraint%2Fpython-constraint
Star 504 https://patch-diff.githubusercontent.com/login?return_to=%2Fpython-constraint%2Fpython-constraint
Code https://patch-diff.githubusercontent.com/python-constraint/python-constraint
Issues 4 https://patch-diff.githubusercontent.com/python-constraint/python-constraint/issues
Pull requests 2 https://patch-diff.githubusercontent.com/python-constraint/python-constraint/pulls
Discussions https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions
Actions https://patch-diff.githubusercontent.com/python-constraint/python-constraint/actions
Projects 0 https://patch-diff.githubusercontent.com/python-constraint/python-constraint/projects
Wiki https://patch-diff.githubusercontent.com/python-constraint/python-constraint/wiki
Security Uh oh! There was an error while loading. Please reload this page. https://patch-diff.githubusercontent.com/python-constraint/python-constraint/security
Please reload this pagehttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
Insights https://patch-diff.githubusercontent.com/python-constraint/python-constraint/pulse
Code https://patch-diff.githubusercontent.com/python-constraint/python-constraint
Issues https://patch-diff.githubusercontent.com/python-constraint/python-constraint/issues
Pull requests https://patch-diff.githubusercontent.com/python-constraint/python-constraint/pulls
Discussions https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions
Actions https://patch-diff.githubusercontent.com/python-constraint/python-constraint/actions
Projects https://patch-diff.githubusercontent.com/python-constraint/python-constraint/projects
Wiki https://patch-diff.githubusercontent.com/python-constraint/python-constraint/wiki
Security https://patch-diff.githubusercontent.com/python-constraint/python-constraint/security
Insights https://patch-diff.githubusercontent.com/python-constraint/python-constraint/pulse
Answered https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90#discussioncomment-12338386
fjwillemsenhttps://patch-diff.githubusercontent.com/fjwillemsen
SebastianDahlin https://patch-diff.githubusercontent.com/SebastianDahlin
Q&Ahttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/categories/q-a
Possibility to set constraints of list of dict data? https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90#top
SebastianDahlin https://patch-diff.githubusercontent.com/SebastianDahlin
Answered https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90#discussioncomment-12338386
fjwillemsenhttps://patch-diff.githubusercontent.com/fjwillemsen
Return to tophttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90#top
Please reload this pagehttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
SebastianDahlin https://patch-diff.githubusercontent.com/SebastianDahlin
Feb 7, 2025 https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90#discussion-7927855
Give feedback.https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
fjwillemsen https://patch-diff.githubusercontent.com/fjwillemsen
Feb 27, 2025 https://github.com/python-constraint/python-constraint/discussions/90#discussioncomment-12338386
View full answer https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90#discussioncomment-12338386
Oldest https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90?sort=old
Newest https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90?sort=new
Top https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90?sort=top
Please reload this pagehttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
fjwillemsen https://patch-diff.githubusercontent.com/fjwillemsen
Feb 27, 2025 https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90#discussioncomment-12338386
Give feedback.https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/SebastianDahlin
Please reload this pagehttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
SebastianDahlinhttps://patch-diff.githubusercontent.com/SebastianDahlin
Feb 27, 2025 https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90#discussioncomment-12341969
Give feedback.https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/fjwillemsen
Please reload this pagehttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
Please reload this pagehttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
fjwillemsenhttps://patch-diff.githubusercontent.com/fjwillemsen
Jul 16, 2025 https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90#discussioncomment-13779599
Give feedback.https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/SebastianDahlin
Please reload this pagehttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
SebastianDahlinhttps://patch-diff.githubusercontent.com/SebastianDahlin
Jul 18, 2025 https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90#discussioncomment-13808293
Give feedback.https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/fjwillemsen
Please reload this pagehttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
Please reload this pagehttps://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
fjwillemsenhttps://patch-diff.githubusercontent.com/fjwillemsen
Jul 22, 2025 https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90#discussioncomment-13851114
Give feedback.https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
SebastianDahlinhttps://patch-diff.githubusercontent.com/SebastianDahlin
Sign up for freehttps://patch-diff.githubusercontent.com/join?source=comment-repo
Sign in to commenthttps://patch-diff.githubusercontent.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpython-constraint%2Fpython-constraint%2Fdiscussions%2F90
🙏 Q&A https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/categories/q-a
https://patch-diff.githubusercontent.com/SebastianDahlin
https://patch-diff.githubusercontent.com/fjwillemsen
https://patch-diff.githubusercontent.com/python-constraint/python-constraint/discussions/90
https://patch-diff.githubusercontent.com/settings/replies?return_to=1
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.